我正在使用 Ladislav Mrnka 的扩展方法:
public static IQueryable<T> IncludeMultiple<T>(this IQueryable<T> query,
params Expression<Func<T, object>>[] includes)
where T : class
{
if (includes != null)
{
query = includes.Aggregate(query,
(current, include) => current.Include(include));
}
return query;
}
我采用了以下方法Here http://www.asp.net/entity-framework/tutorials/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application(稍加改动后):
public virtual IEnumerable<T> Get(
Expression<Func<T, bool>>[] filters = null,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null,
string includeProperties = "")
{
IQueryable<T> query = GetQuery();
if (filters != null)
{
foreach (var filter in filters)
{
query = query.Where(filter);
}
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (orderBy != null)
{
query = orderBy(query);
}
return query;
}
我想在 includeProperties 变量中使用 IncludeMultiple 而不是字符串。
所以,我改变了功能:
public virtual IEnumerable<T> Get(
Expression<Func<T, bool>>[] filters = null,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null,
params Expression<Func<T, object>>[] includes)
{
IQueryable<T> query = GetQuery();
if (filters != null)
{
foreach (var filter in filters)
{
query = query.Where(filter);
}
}
if (includes.Length > 0)
{
query = query.IncludeMultiple(includes);
}
if (orderBy != null)
{
query = orderBy(query);
}
return query;
}
现在,我有点困惑。此方法在定义 GetQuery() 的类中定义(存储库实现)。但如果我想执行这个方法,我最初会使用 GetQuery()..
我对吗?
使用它作为 IQueryable 的扩展是否更好?