我有这个代码并且它给了我以下错误" LINQ to Entities无法识别方法"
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()
?
答案 0 :(得分:4)
LastOrDefault
。您可以使用OrderByDescending
,然后使用FirstOrDefault
var AuxiliarValue = _context.company
.OrderByDescending(r=> yourFieldtoOrder)
.FirstOrDefault(x => x.StartValue.HasValue && (x.StartValue.Value < InicialValue));
它与ToList
一起使用的原因是ToList
将迭代所有结果并将它们带入内存,因此LastOrDefault
将在内存中的集合中执行,而不是在数据库结束。
答案 1 :(得分:2)
当您添加ToList
时,它会起作用,因为查询不再被转换为SQL并由数据库执行。相反,整个数据表从数据库返回到您的应用程序,构建List
来保存该数据,然后使用LINQ to Objects执行操作。
你可能不想这样做;您可能希望调整查询数据的方式,以便将其转换为SQL并针对数据库运行。