如何将一个列表添加到另一个列表中

时间:2014-04-16 12:46:29

标签: c# asp.net-mvc-4

我正在尝试将一个列表添加到另一个列表中,但它给出了最佳重载方法匹配的错误,以及' System.Collection.Generic.List.AddRange(System.Collections.Generic.IEnumerable) '有一些无效的论点

我的代码是:

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");

3 个答案:

答案 0 :(得分:3)

简单来说,您只能连接相同类型的列表

  • eventlistList<tblEvent>
  • listList<RegisteredEvent>

¹这不完全正确:由于IEnumerable是协变的,如果List<S>是{{1}的子类型,实际上可以将List<T>的条目添加到S }}

答案 1 :(得分:0)

List<T>中的T需要具有相同基类型的相同类型或固有

List<RegisteredEvent> eventlist
List<RegisteredEvent> list

List<tblEvent> eventlist
List<tblEvent> list

答案 2 :(得分:0)

您可以使用IEnumerable.Select(我不知道tblEvent的结构,因此请在您的代码中进行调整。

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

但最好的方法是直接创建一个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();