【发布时间】:2018-12-29 11:14:32
【问题描述】:
我在实体框架中有一个通用存储库的实现,我正在尝试改进它以使用 EF 提供的 .Include(..) 函数,而不是按字符串包含导航属性,以便能够安全地重命名属性。
以下是我当前的代码:
public IQueryable<T> GetAll(
Expression<Func<T, bool>> filter = null,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null,
string includeProperties = "")
{
IQueryable<T> query = dbSet;
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (orderBy != null)
{
return orderBy(query);
}
else
{
return query;
}
}
我目前的使用方式如下:
repository.GetAll(
u => u.Name = "John",
u => u.OrderBy(x => x.Name),
"Address.State",
);
我的问题是:如何更改方法以便能够以以下方式(或类似方式)调用它:
repository.GetAll(
u => u.Name = "John",
u => u.OrderBy(x => x.Name),
u => u.Include(x => x.Address).ThenInclude(x => x.State),
);
【问题讨论】:
标签: c# entity-framework .net-core