C# 无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Collections.Generic.List

C# 无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“System.Collections.Generic.List,c#,linq,C#,Linq,我调用了一个GetData调用,该调用返回了一个IQueryable对象。我使用下面的LINQ SelectMany来过滤并选择需要删除的字段 返回一个列表,我得到以下错误 无法将类型System.Collections.Generic.List隐式转换为System.Collection.Generic.List 这是我的密码 List<CASES> caseList = cs.GetData(foiaNumber).ToList(); Dictionary<int, st

我调用了一个GetData调用,该调用返回了一个IQueryable对象。我使用下面的LINQ SelectMany来过滤并选择需要删除的字段 返回一个列表,我得到以下错误

无法将类型System.Collections.Generic.List隐式转换为System.Collection.Generic.List

这是我的密码

List<CASES> caseList = cs.GetData(foiaNumber).ToList();

Dictionary<int, string> NameDict = 
    caseList.ToDictionary(cases => cases.UID, cases =>     cases.NAME);


List<MyDataType> bindingGrdList = 
    caseList.SelectMany(x => x.ListObject)
        .Select(n => 
            new { 
                   SUBMITTER_NAME = NameDict[n.UID], 
                   NUMBER = n.UID, 
                   DATE_SENT = n.DATE_SENT, 
                   DATE_DUE = n.DATE_DUE, 
                   FINAL_DETERMINATION = n.FINAL_DETERMINATION 
                 }).ToList();
如何修复匿名类型错误?谢谢。

尝试改用var:

这将使它从您的代码中推断出类型,这就是您想要匿名类型的类型。

Replace

n => new { SUBMITTER_NAME = NameDict[n.UID], NUMBER = n.UID,
    DATE_SENT = n.DATE_SENT, DATE_DUE = n.DATE_DUE,
    FINAL_DETERMINATION = n.FINAL_DETERMINATION }


您需要将投影从匿名类型更改为MyDataType。为此,您需要如下更改选择:

List<MyDataType> bindingGrdList = 
    caseList.SelectMany(x => x.ListObject)
        .Select(n => 
            new MyDataType 
                { 
                   SUBMITTER_NAME = NameDict[n.UID], 
                   NUMBER = n.UID, 
                   DATE_SENT = n.DATE_SENT, 
                   DATE_DUE = n.DATE_DUE, 
                   FINAL_DETERMINATION = n.FINAL_DETERMINATION 
                 }).ToList();

注意:我假设这些属性是MyDataType的正确属性,并且MyDataType有一个默认的无参数构造函数。

当变量是方法的局部变量时,它很有用,虽然大多数情况下结果都会传递给调用方方法,但他的问题的第一个版本只提到bindingGrdList的类型列表。当时没有提到MyDataType。对于更新的问题,应该是罗琳回答的方式。不过我想指出的是,对于ASP.NET控件之类的东西来说,它可能非常有用,绑定数据通常是对象的形式,它将替换任何DataTable或IEnumerable数据源。在这些情况下,没有必要创建显式类。是的,我知道,我投票赞成你的答案:-
n => new MyDataType { SUBMITTER_NAME = NameDict[n.UID], NUMBER = n.UID,
    DATE_SENT = n.DATE_SENT, DATE_DUE = n.DATE_DUE,
    FINAL_DETERMINATION = n.FINAL_DETERMINATION }
List<MyDataType> bindingGrdList = 
    caseList.SelectMany(x => x.ListObject)
        .Select(n => 
            new MyDataType 
                { 
                   SUBMITTER_NAME = NameDict[n.UID], 
                   NUMBER = n.UID, 
                   DATE_SENT = n.DATE_SENT, 
                   DATE_DUE = n.DATE_DUE, 
                   FINAL_DETERMINATION = n.FINAL_DETERMINATION 
                 }).ToList();