我正在尝试将一个列表添加到另一个列表中,但它给出了最佳重载方法匹配的错误,以及' 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");
答案 0 :(得分:3)
简单来说,您只能连接相同类型的列表.¹
eventlist
是List<tblEvent>
list
是List<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();