。在Linq to Entity中可扩展

时间:2015-06-05 13:32:17

标签: linq entity-framework lambda

在Linq to Entity中,.AsExpandable()究竟做了什么?在哪里以及为何使用它?它是否包含所有相关实体进入延迟加载的查询?

2 个答案:

答案 0 :(得分:10)

  

"实体框架的查询处理管道无法处理调用表达式,这就是您需要在查询中的第一个对象上调用AsExpandable的原因。通过调用AsExpandable,您可以激活LINQKit的表达式访问者类,它使用Entity Framework可以理解的更简单的结构替换调用表达式。" ~Josef Albahary

有关详细信息,我建议您阅读author of LinqPad

答案 1 :(得分:2)

没有从方法组到Expression(相应委托类型)的隐式转换。存在从方法组到匹配签名的委托的隐式转换。因此,只有IEnumerable重载匹配。

当然,这并不是说你需要使用lambda。只需写下:

ctx.Set()AsExpandable()如(绰号)。 因为你传入一个表达式(毕竟,ByName已经是一个Expression,这正是Queryable.Where所要求的),所以它将作为一个查询进行评估,而不是在linq对象中。