Entity Framework 5. Multiple Include. Is this possible?

entity-framework

Solution

If you really want to create your own `.Include` non-extension method that allows for multiple paths in one call, internally translating to the already provided `.Include` method, you can do something like

public IQueryable<T> Include<T>(params Expression<Func<T, object>>[] paths)
    where T : class
{
    IQueryable<T> query = _context.Set<T>();
    foreach (var path in paths)
        query = query.Include(path);
    return query;
}

This is pretty close to what you have already, but avoids the pitfall with `Enumerable.Aggregate` that you encountered: you'd have the same problem if you replace `IQueryable<T> query` with `var query` in my version.

Note that using many `.Include` may harm performance. If it does in your situation, you can rewrite it to use multiple queries, which you can run one after the other in a transaction.

Personally, as you can call the already provided `.Include` extension method (`using System.Data.Entity;`) on any `IQueryable`, I'd just write it as:

repository.Posts.Include(x => x.Images).Include(x => x.Tags).First(x => x.Id == 1)

Problem

I am trying to create a multiple include method in my repository to use as follows: ``` repository.Include<Post>(x => x.Images, x => x.Tags).First(x => x.Id == 1) ``` I tried something as: ``` public IQueryable<T> Include<T>(params Expression<Func<T, Object>>[] paths) where T : class { return paths.Aggregate(_context.Set<T>(), (x, path) => x.Include(path)); } // Include ``` But I get the error: Cannot implicitly convert type 'System.Linq.IQueryable' to 'System.Data.Entity.DbSet'. Note that the original include is the following: public static IQueryable Include( this IQueryable source, Expression> path ) where T : class; Can I make this work without turning my repository method into static? Thank You, Miguel

Original source