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

tac*_*cos 7 c# linq lambda entity-framework

我的信念一直是,如果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 DbSetlambda表达式是否转变为SQL,或者它是否都是在事后应用的?

编辑:如果他们确实变成了SQL,那么如何EF"看到"在获取名称后将要发生的整个事件堆栈?如果我打电话instance.MethodA().MethodB(),不通常意味着方法AB顺序执行?

phi*_*ady 3

EF 提供程序实现。获取表达式树而不是 lambda。 有关 EF 中表达式的更多信息 经过更多思考您的问题后,我猜测您没有意识到所使用的表达式。Expression<Function<t,bool>> predicate和 只是之间的区别Func<t,bool> predicate。很重要。提供者将无法使用 func。它需要一个表达式树。

LINQ 的一个子集可用于基于 Linq to 实体标准的表达式。支持的查询

尝试在调试器中查看类型变量的内容Expression<Func<t,bool>>。您将清楚地看到 lambda 是如何转换为表达式的,数据库提供程序正是使用该表达式将其转换为 SQL。