【发布时间】:2017-11-08 19:22:37
【问题描述】:
此代码不起作用(返回 null):
var result = context.Data
.Select(x => x)
.Where(x => x.ID == 1)
.FirstOrDefault();
但是这个:
var result = context.Data.Take(1);
有效。
我的问题是为什么当我使用 EF 并且 context.Data 返回 IEnumerable<Data> 时,第一个代码不起作用? (是的,数据包含 ID 等于 1 的元素)
【问题讨论】:
-
Select是多余的,Where可以替换为FirstOrDefault。只要您的表中有数据,Take“工作”就不足为奇了,但是 where - 只是意味着ID == 1没有元素 -
顺便说一句,您可以大大简化为
context.Data.FirstOrDefault(x => x.ID == 1);。 -
如果 context.Data 返回一个 IEnumerable,这与 EF 或 LINQ2SQL 无关。此外,这两种说法都做了截然不同的事情。第一个“应该”返回 Id==1 的第一个对象,如果不存在则返回 null,第二个应该返回包含第一个对象的 List,不应用任何条件。
-
使用 .ToList() 将枚举转换为 List
-
@ErikPhilips -
Take(1).ID不会编译
标签: c# entity-framework linq where