LINQ Lambda 中不支持的异常
Not supported exception in LINQ Lambda
我有这段代码,它给了我以下错误 "LINQ to Entities does not recognize the method"
var AuxiliarValue = _context.company.LastOrDefault(x => x.StartValue.HasValue && (x.StartValue.Value < InicialValue));
InicialValue 是 Double
但是当我输入 ToList()
时,它起作用了
var AuxiliarValue = _context.company.ToList().LastOrDefault(x => x.StartValue.HasValue && (x.StartValue.Value < InicialValue));
任何人都可以向我解释为什么它与 ToList()
一起使用吗?
LINQ to Entities 不支持 LastOrDefault
。您可以使用 OrderByDescending
然后使用 FirstOrDefault
var AuxiliarValue = _context.company
.OrderByDescending(r=> yourFieldtoOrder)
.FirstOrDefault(x => x.StartValue.HasValue && (x.StartValue.Value < InicialValue));
它与 ToList
一起工作的原因是 ToList
将迭代所有结果并将它们放入内存中,因此 LastOrDefault
在内存中的集合上执行,而不是比在数据库端。
它在您添加 ToList
时起作用,因为查询不再被翻译成 SQL 并由数据库执行。相反,整个 table 数据从数据库返回到您的应用程序,构建一个 List
来保存该数据,然后使用 LINQ to Objects 执行操作。
你可能不想那样做;您可能想要调整查询数据的方式,以便它可以根据数据库转换为 SQL 和 运行。
我有这段代码,它给了我以下错误 "LINQ to Entities does not recognize the method"
var AuxiliarValue = _context.company.LastOrDefault(x => x.StartValue.HasValue && (x.StartValue.Value < InicialValue));
InicialValue 是 Double
但是当我输入 ToList()
时,它起作用了
var AuxiliarValue = _context.company.ToList().LastOrDefault(x => x.StartValue.HasValue && (x.StartValue.Value < InicialValue));
任何人都可以向我解释为什么它与 ToList()
一起使用吗?
LastOrDefault
。您可以使用 OrderByDescending
然后使用 FirstOrDefault
var AuxiliarValue = _context.company
.OrderByDescending(r=> yourFieldtoOrder)
.FirstOrDefault(x => x.StartValue.HasValue && (x.StartValue.Value < InicialValue));
它与 ToList
一起工作的原因是 ToList
将迭代所有结果并将它们放入内存中,因此 LastOrDefault
在内存中的集合上执行,而不是比在数据库端。
它在您添加 ToList
时起作用,因为查询不再被翻译成 SQL 并由数据库执行。相反,整个 table 数据从数据库返回到您的应用程序,构建一个 List
来保存该数据,然后使用 LINQ to Objects 执行操作。
你可能不想那样做;您可能想要调整查询数据的方式,以便它可以根据数据库转换为 SQL 和 运行。