Skip to content

Instantly share code, notes, and snippets.

@oneillci
Created July 30, 2012 06:45
Show Gist options
  • Star 13 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save oneillci/3205384 to your computer and use it in GitHub Desktop.
Save oneillci/3205384 to your computer and use it in GitHub Desktop.
Using EF Include() with generic repository
public IQueryable<T> FindBy(Expression<Func<T, bool>> predicate, params Expression<Func<T, object>>[] includes)
{
var query = GetAll().Where(predicate);
return includes.Aggregate(query, (current, includeProperty) => current.Include(includeProperty));
}
// Sample usage
userRepository.FindBy(x => x.Username == username, x.Roles)
@Christopher-Andrade
Copy link

Very nice solution.

@Sammking
Copy link

Sammking commented Sep 12, 2017

I get error near GetAll(), as shown in the figure
include

This is my GetAll () Method
public virtual IEnumerable GetAll()
{
return DbSet.ToList();
}

@pintugupta1986
Copy link

pintugupta1986 commented Oct 5, 2017

public async Task<IEnumerable> FindBy(Expression<Func<TEntity, bool>> filter, Func<IQueryable, IOrderedQueryable> orderBy = null, params Expression<Func<TEntity, object>>[] includes)
{
try
{
IQueryable query = this.DbSet.Where(filter);
if (orderBy != null)
query = orderBy(query);
includes.Aggregate(query, (current, includeProperty) => current.Include(includeProperty));
return await query.ToListAsync();
}
catch (Exception e)
{
throw e;
}
}

@DawidNowak
Copy link

DawidNowak commented Feb 8, 2018

How can I use ThenInclude with this?
I have User class which contains ICollection<Skill>, where every Skill instance contains ICollection<Entry>.
FindBy(x => x.Id == 1, x.Skills) works perfect, but how include Entries in every Skill?

@VictorioBerra
Copy link

@cagdas01
Copy link

You can "_context.Set()" instead of GetAll() who have error.
Nice solution thank you ...

@ovpoddar
Copy link

ovpoddar commented Mar 3, 2021

public IQueryable Find(Expression<Func<T, bool>> predicate, params Func<IQueryable, IQueryable>[] includes) =>
includes.Aggregate(_dbContext.Set().Where(predicate).AsQueryable(), (current, includesproptity) => includesproptity(current));

_context.Find(a => a.id == id, image =>
{
return image.Include(b => b.PersonImages)
.ThenInclude(a => a.Image);
}, personType =>
{
return personType.Include(a => a.PersonType);
});

@alikrc
Copy link

alikrc commented Dec 8, 2021

Sample usage is wrong should be like this:

// Sample usage
userRepository.FindBy(x => x.Username == username, x=> x.Roles)

@subinbab
Copy link

subinbab commented Apr 2, 2022

How Can I get multiple navigation property

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment