【问题标题】:How to convert an IQueryable<T> to a List<T>?如何将 IQueryable<T> 转换为 List<T>?
【发布时间】:2010-11-18 05:07:35
【问题描述】:

刚刚学习 LINQ,我在我的测试项目中遇到了新手障碍。你能解释一下我做错了什么吗?

public List<ToDoListInfo> retrieveLists(int UserID)
{
//Integrate userid specification later - need to add listUser table first
IQueryable<ToDoListInfo> lists = 
    from l in db.ToDoLists
    select new ToDoListInfo { 
        ListID = l.ListID, 
        ListName = l.ListName, 
        Order = l.Order, 
        Completed = l.Completed 
    };

    return lists.ToList<ToDoListInfo>;
}     

我收到一条错误消息:

无法将方法组“ToList”转换为非委托类型 'System.Collections.Generic.List' 你打算 调用方法?

【问题讨论】:

  • 线索在“你打算调用该方法吗?”

标签: c# linq iqueryable


【解决方案1】:

你只需要括号:

lists.ToList&lt;ToDoListInfo&gt;();

此外,您不必声明类型参数,即您可以使用以下内容并让类型系统推断类型参数:

lists.ToList();

【讨论】:

  • 在这里声明类型名称参数实际上可能是 bad 的事情,因为您必须匹配 lists IEnumerable&lt;T&gt; 实现的类型参数,这可能会导致编译时错误;最好让type-inference 做它的工作
  • 如果我想将 iqueryble 集合转换为不同类型的列表怎么办?例如,假设我有两个具有几乎相似签名的 A 类和 B 类。现在我从 A 中检索数据并想要列出 B 类型的列表,我该怎么做?
【解决方案2】:

您只是缺少 ToList 上的右括号,应该是:

 ToList();

ToList<ToDoListInfo>();

【讨论】:

    猜你喜欢
    • 2012-11-15
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 2014-02-05
    • 1970-01-01
    • 2019-04-13
    • 1970-01-01
    相关资源
    最近更新 更多