Linq where子句在Entity Framework中不起作用

时间:2017-11-08 19:22:37

标签: c# entity-framework linq where

此代码不起作用(返回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的元素)

2 个答案:

答案 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();
    }
}

当我在“本地人”下暂停时,我会看到填充的变量:

enter image description here