Search code examples
entity-framework-4linq-to-entities

Linq-to-Entities Include method not found


I am using EF4 within a MVC3 application and I was looking for a way to view all my contacts within a given workgroup. In the controller I specified:

var wg = from w in _repo.Workgroups.Include("Contact").ToList();

but I get the following error:

'System.Linq.IQueryable' does not contain a definition for 'Include' and no extension method 'Include' accepting a first argument of type 'System.Linq.IQueryable' could be found (are you missing a using directive or an assembly reference?)

I though this method was built into EF4. Do I have enable it somehow?


Solution

  • Yes the method is build into EF but it is not available on IQueryable interface. It is available on ObjectQuery. If you want to call it on IQueryable you must create your own extension wich will convert current query to ObjectQuery and perform Include. Something like:

    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);
    }
    

    Or you must use Entity Framework Feature CTP5 where such extensions are already available.