如何从实体框架/ LINQ的特定表中提取Tuple列表?

本文关键字:提取 Tuple 列表 实体 框架 LINQ | 更新日期: 2023-09-27 18:13:22

我需要从c# . net中的一个大表中提取一对'ID'/'Name'。

我尝试这个请求:

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

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

LINQ to Entities只支持无参数构造函数和初始化式。

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

最诚挚的问候,亚历克斯

如何从实体框架/ LINQ的特定表中提取Tuple列表?

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

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]

然后移动到LINQ to Objects by AsEnumerable,得到你的元组

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

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

Tuple类确实有一些构造函数(多达8个项目),但Create()助手方法使创建更直接。