10

我需要使用实体框架从 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 仅支持无参数构造函数和初始化程序。

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

此致,

亚历克斯

4

2 回答 2

16

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

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 byAsEnumerable并获取您的元组。

于 2013-05-14T12:14:59.887 回答
2

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

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

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

于 2013-05-14T12:16:22.357 回答