C#|EF查询报错问题

EF查询报错 “The LINQ expression node type ‘Invoke’ is not supported in LINQ to Entities.” 执行语句:

Func fun = (u) => { return !u.IS_Delete && u.Account.Equals(account); }; using(AuthDBContext context = new AuthDBContext()) { return context.Set().Where(u=> fun(u)).FirstOrDefault(); }

【C#|EF查询报错问题】执行后报错:
C#|EF查询报错问题
文章图片

在执行查询时,无法将linq to entity语句翻译成SQL语句,改成下面这种方式,执行成功。
using(AuthDBContext context = new AuthDBContext()) { return context.Set().AsEnumerable().Where(u=> fun(u)).FirstOrDefault(); }

这种是将所有的数据全部查询出来,加载到内存中,然后使用linq to entity筛选。生成的SQL语句为:
C#|EF查询报错问题
文章图片

而下面这种方式则会在SQL中增加where条件。
using(AuthDBContext context = new AuthDBContext()) { return context.Set().Where(u=> u.Account=="Admin").FirstOrDefault(); }

执行成功,执行的SQL语句为:
C#|EF查询报错问题
文章图片

    推荐阅读