使用从 MSDN 文章中收集的 Facade / Repository 中的方法,我产生了:
public virtual IEnumerable<TEntity> Fetch(
Expression<Func<TEntity, bool>> filter,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy,
string includeProperties)
{
IQueryable<TEntity> query = this.DbContext.Set<TEntity>();
if (filter != null)
{
query = query.Where(filter);
}
if (!string.IsNullOrEmpty(includeProperties))
{
foreach (var includeProperty in includeProperties
.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
}
return orderBy == null
? query
: orderBy(query);
}
代码分析生成 2 条警告,如下所示:
CA1006:Microsoft.Design:考虑一个
MyType<TDbContext, TEntity>.Fetch(Expression<Func<TEntity, bool>>, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>>, string)
“不嵌套泛型类型”Expression<Func<TEntity, bool>>
的设计。CA1006:Microsoft.Design:考虑一个
MyType<TDbContext, TEntity>.Fetch(Expression<Func<TEntity, bool>>, Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>>, string)
“不嵌套泛型类型”Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>>
的设计。
现在,我知道它们只是警告,我可以自由地压制它们(并且可能会因为它们在这种情况下显得过于迂腐)。但是,出于兴趣,是否有一种可能的设计可以完成与此方法相同的操作而不会产生代码分析警告?
理查德