作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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 中采用了以下方法(稍作改动后):
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 的扩展是否更好?
最佳答案
不,调用 GetQuery
后不需要使用此方法,因为调用 GetQuery
是此方法中的第一个命令。您可以根据需要使用 GetQuery
或 Get
。 Get
方法实际上非常好,因为它隐藏了包含。在单元测试和模拟的情况下,将其用作存储库方法比将其用作扩展方法要好得多。
关于c# - 在方法中使用 IncludeMultiple,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5784727/
我正在使用 Ladislav Mrnka 的扩展方法: public static IQueryable IncludeMultiple(this IQueryable query,
我有一辆与型号关联的车辆,型号与制造商关联。 这是我的通用存储库,与我的项目中 LazyLoadingEnabled = false 的关联相关: public IQueryable IncludeM
我是一名优秀的程序员,十分优秀!