LINQ Lambda中不支持异常

时间:2015-01-29 17:54:06

标签: c# linq exception lambda

我有这个代码并且它给了我以下错误" 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()

2 个答案:

答案 0 :(得分:4)

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将在内存中的集合中执行,而不是在数据库结束。

答案 1 :(得分:2)

当您添加ToList时,它会起作用,因为查询不再被转换为SQL并由数据库执行。相反,整个数据表从数据库返回到您的应用程序,构建List来保存该数据,然后使用LINQ to Objects执行操作。

你可能不想这样做;您可能希望调整查询数据的方式,以便将其转换为SQL并针对数据库运行。