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

时间:2010-12-28 08:42:00

标签: c# entity-framework-4 lambda

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

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

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

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

var customers = from c in
context.Customers.Include(c=>c.Phone)

3 个答案:

答案 0 :(得分:213)

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

var princesses1 = context.Princesses.Include(p => p.Unicorns).ToList();

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

using System.Data.Entity;

有关详细信息,请参阅此ADO.NET team blog文章。

答案 1 :(得分:86)

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

using System.Data.Entity;

答案 2 :(得分:5)

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

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