Допустим, у вас есть два класса Foo
и FooContainer
, например:
public class Foo : BaseEntity
{
public int Id { get; set; }
}
public class FooContainer : BaseEntity
{
public int Id { get; set; }
public virtual Foo Foo { get; set; }
}
и репо:
public class FooContainerRepository : Repository<FooContainer, object>
{
public IQueryable<FooContainer> GetFooContainers(Expression<Func<FooContainer, bool>> filter = null,
params Expression<Func<FooContainer, object>>[] includes) => base.Get(filter, includes);
}
Чтобы получить FooContainer
сущности с Foo
включено, вы бы назвали репо следующим образом:
var repo = new FooContainerRepository();
repo.GetFooContainers(null, fc => fc.Foo);
Переходя к методу Get
в Repository
классе:
foreach (var include in includes)
{
query = query.Include(include); // *include coment*
}
включить комментарий - на данный момент вы знаете только, что include
- это Fun c, то есть FooContainer
в качестве параметра и возвращает object
. Несмотря на то, что вы знаете, что этот объект имеет флаг IsDeleted
, это все еще object
- это означает, что с текущей сигнатурой метода Get
невозможно добавить фильтрацию Where
к включенным объектам.
Для этого вам необходимо указать Expression<Func<T, bool>> includeFilter
для каждой включенной сущности