Saurabh Gadariya
Saurabh Gadariya

Reputation: 190

How to add one List into another List

I am trying to add one list into another but it is giving me error of The best overloaded method match for 'System.Collection.Generic.List.AddRange(System.Collections.Generic.IEnumerable)' has some invalid arguments

My code is:

public ActionResult RegisteredEvent(string Cno)
    {
        if (Request.IsAjaxRequest())
        {
            List<tblEvent> eventlist = new List<tblEvent>();
            List<RegisteredEvent> list = new List<RegisteredEvent>();
            var db = new clubDataContext();
            int[] eventIds = (from m in db.EventRegistrations where m.Cno == Cno select m.Event_Id).ToArray();
            int i = 1;
            foreach (var item in eventIds)
            {
                 list = (from m in db.tblEvents
                        where item.Equals(m.EventId)
                        select new RegisteredEvent()
                        {
                            id = m.EventId,
                            caption = m.Caption,
                            description = m.Description,
                            date = m.Date.ToString()
                        }).ToList();

                eventlist.AddRange(list); //Here I am getting error
            }
             ViewBag.eventDetail = eventlist;
            return PartialView("RegisteredEvent");

Upvotes: 0

Views: 788

Answers (3)

User.Anonymous
User.Anonymous

Reputation: 1726

You can use IEnumerable.Select as this (I don't know the structure of tblEvent, so adapt this at your code.

eventlist.AddRange(list.Select(x => new tblEvent{ id = x.id, caption = x.caption, ... }));

But the best way is to create directly a tblEvent

//the list sent to View             
eventlist = (from m in db.tblEvents
             where item.Equals(m.EventId)
             select new tblEvent() //here
             {
                 id = m.EventId,
                 caption = m.Caption,
                 description = m.Description,
                 date = m.Date.ToString()
             }).ToList();

Upvotes: 0

Murdock
Murdock

Reputation: 4672

The T in List<T> needs to have the same type or inherent from the same base type

List<RegisteredEvent> eventlist
List<RegisteredEvent> list

or

List<tblEvent> eventlist
List<tblEvent> list

Upvotes: 0

Heinzi
Heinzi

Reputation: 172468

Simply speaking, you can only concatenate lists of the same type

  • eventlist is a List<tblEvent>
  • list is a List<RegisteredEvent>

¹ This is not entirely correct: Since IEnumerable is covariant, it is actually possible to add entries of a List<S> to a List<T>, if S is a subtype of T.

Upvotes: 3

Related Questions