我正在使用 C# 和 .NET Framework 4.5.1 使用 Entity Framework 6.1.3 从 SQL Server 数据库检索数据。
我有这个:
codes = codesRepo.SearchFor(predicate)
.Select(c => new Tuple<string, byte>(c.Id, c.Flag))
.ToList();
当我运行它时,我收到以下消息:
LINQ 仅支持无参数构造函数和初始值设定项
到实体。
我不知道如何创建元组,因为我找到的所有示例大多都是这样的。
我已经尝试过这个:
codes = codesRepo.SearchFor(predicate)
.Select(c => Tuple.Create(c.Id, c.Flag))
.ToList();
并得到这个错误:
LINQ to Entities 无法识别该方法
'System.Tuple`2[System.String,System.Byte]
Create[String,Byte](System.String, Byte)'方法,以及这个方法
无法转换为存储表达式。
哪里有问题?
虽然answer https://stackoverflow.com/questions/33545249/create-a-tuple-in-a-linq-select/33545368#33545368 by 奥克塔维奥克 https://stackoverflow.com/users/1394631/octavioccl可行,最好先将查询结果投影为匿名类型,然后切换为可枚举并将其转换为元组。这样您的查询将从数据库中仅检索所需的字段。
codes = codesRepo.SearchFor(predicate)
.Select(c => new { c.Id, c.Flag })
.AsEnumerable()
.Select(c => new Tuple<string, byte>(c.Id, c.Flag))
.ToList();
Note:上述规则适用于 EF6。 EF Core 通过元组构造函数自然支持元组(在投影中或作为连接/组键),例如原始查询简单有效
codes = codesRepo.SearchFor(predicate)
.Select(c => new Tuple<string, byte>(c.Id, c.Flag))
.ToList();
但不是Tuple.Create
方法(EF Core 2.x)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)