在Linq to Entity中,.AsExpandable()
究竟做了什么?在哪里以及为何使用它?它是否包含所有相关实体进入延迟加载的查询?
答案 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对象中。