在方法中使用IncludeMultiple
本文关键字:IncludeMultiple 方法 | 更新日期: 2023-09-27 17:53:07
我使用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;
}
我从这里采用了以下方法(经过一些更改):
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;
}
我想使用IncludeMultiple而不是includeProperties变量中的字符串。因此,我改变了函数:
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?
不,您不需要在调用GetQuery
之后使用此方法,因为调用GetQuery
是该方法中的第一个命令。您可以根据需要使用GetQuery
或Get
。Get
方法实际上非常好,因为它隐藏了include。在单元测试和模拟的情况下,使用它作为存储库方法比使用它作为扩展方法要好得多。