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 和 运行。