此代码不起作用(返回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的元素)
答案 0 :(得分:0)
简单的答案是:它应该有效。虽然您的生产线可以优化为:
var v = context.Data.FirstOrDefault(x => x.ID == 1);
所以,基本上你的数据库中没有ID == 1
,或者你拼错了。
如果您想要IEnumerable<T>
类型,那么:
var v = context.Data.Where(x => x.ID == 1);
但我宁愿使用list:
var v = context.Data.Where(x => x.ID == 1).ToList();
答案 1 :(得分:0)
这是一个与实体框架无关的问题,但是LINQ如何使用它的扩展方法处理集合的本质。让我们在C#中的控制台应用程序中做一个简单的例子:
class Program
{
public class Faker
{
public int Id { get; set; }
public string Name { get; set; }
public Faker(int id, string name)
{
Id = id;
Name = name;
}
}
static void Main(string[] args)
{
var ls = new List<Faker>
{
new Faker(1, "A"),
new Faker(2, "B")
};
Faker singleItem = ls.FirstOrDefault(x => x.Id == 1);
IEnumerable<Faker> collectionWithSingleItem = ls.Where(x => x.Id == 1);
Console.ReadLine();
}
}
当我在“本地人”下暂停时,我会看到填充的变量: