c# – Entity Framework在获取数据之前或之后执行lambda表达式吗?

我的信念一直是,如果BigDataSet是一个实体,你分配var someThing = Context.BigDataSet.Single(x => x.Name.Trim().ToUpper.Equals(someName.Trim().ToUpper())) ;那么EF将会将你的lambda表达式翻译成一个查询,例如

SELECT * FROM big_data_set WHERE name =(someName)

但在考虑之后,除了将Context.BigDataSet的结果保存在内存中然后执行搜索之外,我看不到它的工作方式.

EF DbSet lambda表达式是否转换为SQL,或者它是否都是在事后应用的?

编辑:如果他们确实变成了SQL,那么EF如何“看到”在获取名称后会发生的所有事情?如果我调用instance.MethodA().MethodB(),那通常意味着方法A和B是按顺序执行的吗?

最佳答案
EF provider implementations.得到表达式树而不是lambdas.
More about expressions in EF
在更多地考虑了你的问题后,我的猜测是你没有意识到使用的表达式.
表达式< Function< t,bool>>之间的差异谓词,只是Func< t,bool>谓语.很重要.提供者将无法使用func.它需要一个表达式树.

LINQ的子集可以在基于Linq to entities standard.supported queries的表达式中使用

尝试在调试器中查看Expression< Func< t,bool>>类型的变量的内容. .
您可以很好地了解lambda如何转换为表达式,并且数据库提供程序使用此表达式转换为SQL.

转载注明原文:c# – Entity Framework在获取数据之前或之后执行lambda表达式吗? - 代码日志