使用包含在实体框架4中的lambda表达式

Dan*_*ani 85 c# lambda entity-framework-4

我见过很多关于如何克服这个问题的文章,都与CTP4有关,或者添加了我自己的扩展方法.

是否有一个"官方"EF4包含方式在内部使用lambda表达式(对于第一级关系以及第二级和更多级别)或者它最终是否包含在RTM中?

它有一个 - 我很乐意学习如何做到这一点,因为现在在我的代码中使用lambda表达式(使用#system.data.entity#system.data.linq)仍然给了我:

无法将lambda表达式转换为类型'string',因为它不是委托类型:

var customers = from c in
context.Customers.Include(c=>c.Phone)
Run Code Online (Sandbox Code Playgroud)

cec*_*lip 217

实体框架4.1的RTM版本实际上包括扩展方法EntityFramework.dll的文件,用于通过拉姆达预先加载Include功能.只需在项目中包含DLL,您就应该能够编写如下代码:

var princesses1 = context.Princesses.Include(p => p.Unicorns).ToList();
Run Code Online (Sandbox Code Playgroud)

请记住添加Import/Using语句以包含System.Data.Entity命名空间.否则编译器找不到扩展方法.例如:

using System.Data.Entity;
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅此ADO.NET团队博客文章.


Aar*_*nLS 86

虽然这个问题暗示了这一点,但对于那些遇到同样问题的人来说,如果他们不能在.Include中使用lambdas,请确保你拥有:

using System.Data.Entity;
Run Code Online (Sandbox Code Playgroud)


Lad*_*nka 5

暂时没有正式支持在RTM中包含lambda表达式.我正在使用.

当我们谈论CTP4时,我们意味着实体框架功能.它是比EF4更新的API.它主要包括Code First和其他一些改进.

  • 从EF 4.3.x开始,这个答案是错误的.其他答案是正确的,必须有**使用System.Data.Entity**来获取lamda表达式的重载. (31认同)