【问题标题】:How can I extract a list of Tuple from a specific table with Entity Framework / LINQ?如何使用 Entity Framework / LINQ 从特定表中提取元组列表?
【发布时间】:2013-05-08 17:01:29
【问题描述】:

我需要使用实体框架从 C# .NET 中的大表中提取一对“ID”/“名称”的列表。

我试试这个请求:

List<Tuple<int, string>> list = (from res in db.Resource 
                                 select new Tuple<int, string>(res.Resource_ID, res.Name)).ToList();

但不幸的是,我遇到了这个错误:

LINQ to Entities 仅支持无参数构造函数和初始化程序。

我不明白如何使用这个框架提取这个元组列表,我对这个错误感到有点失落。 你能帮我理解和解决我的问题吗?

最好的问候,

亚历克斯

【问题讨论】:

    标签: c# .net linq entity-framework list


    【解决方案1】:

    您可以从 db.Resource 创建一个列表并使用 LINQ to Collections 消除此限制:

    var list = db.Resource.ToList().Select(res => Tuple.Create(res.Resource_ID, res.Name));
    

    Tuple 类确实有一些构造函数(最多 8 项),但 Create() 辅助方法使创建更加简单。

    【讨论】:

    • 很好,很高兴它对你有帮助。
    • @fuex 易于理解。谢谢
    • Tuple 类确实有一个构造函数。请参阅: var tuple = new Tuple(res.Resource_ID, res.Name);
    【解决方案2】:

    您可以通过选择匿名类型来做中间步骤:

    db.Resource.Select(x => new { x.Resource_ID, x.Name }).AsEnumerable().Select(x => Tuple.Create(x.Resource_ID, x.Name)).ToList();
    

    在 Linq To Entities 中不支持创建元组的操作,因此您必须选择匿名类型,这相当于:

    SELECT [Resource].[Resource_ID], [Resource].[Name]
    

    然后通过AsEnumerable 移至 LINQ to Objects 并获取您的元组。

    【讨论】:

    • +1 用于使用匿名类型来减少从数据库传输的数据量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 2011-08-17
    • 1970-01-01
    • 2015-07-13
    相关资源
    最近更新 更多