Linq-to-Entities Include方法未找到

jdi*_*iaz 23 linq-to-entities entity-framework-4

我在MVC3应用程序中使用EF4,我正在寻找一种方法来查看给定工作组中的所有联系人.在我指定的控制器中:

var wg = from w in _repo.Workgroups.Include("Contact").ToList();
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

'System.Linq.IQueryable'不包含'Include'的定义,也没有扩展方法'Include'接受类型为'System.Linq.IQueryable'的第一个参数'(你是否缺少using指令或程序集引用) ?)

我虽然这种方法是内置于EF4中的.我是以某种方式启用它吗?

Bru*_*ill 84

我也收到了这个错误并通过添加以下引用解决了它:

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

  • 这适用于Entity Framework 5及更高版本. (4认同)
  • 对于 2020 年的人们来说仍然是一个有价值的答案:) (2认同)

Lad*_*nka 15

是的,该方法是构建到EF中,但在IQueryable界面上不可用.它可用ObjectQuery.如果您想要调用它,IQueryable您必须创建自己的扩展名,将当前查询转换为ObjectQuery并执行Include.就像是:

public static IQueryable<T> Include<T>(this IQueryable<T> query, string property)
{
  var objectQuery = query as ObjectQuery<T>;
  if (objectQuery == null)
  {
    throw new NotSupportedException("Include can be called only on ObjectQuery");
  }

  return objectQuery.Include(property);
}
Run Code Online (Sandbox Code Playgroud)

或者您必须使用实体框架功能CTP5,此类扩展已经可用.


小智 10

布鲁斯希尔的回答是绝对正确的.

为了扩展他的答案,Include方法是System.Data.Entity命名空间中的扩展方法.

它不会影响您如何使用它们,但Include方法实际上是在名为DbExtensions的静态类中定义的.在msdn.microsoft.com,你会看到他们记录都在这里,不System.Linq.IQueryable下,使他们只是有点难找.