我的项目中有一个genericRepository,其功能如下:
public virtual IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null)
{
IQueryable<TEntity> query = dbSet;
if (filter != null)
{
query = query.Where(filter);
}
if (orderBy != null)
{
return orderBy(query).ToList();
}
else
{
return query.ToList();
}
}
如果我想获得仅由一个对象过滤的元素,这种方法很好。 在什么情况下我需要链接3-4 where子句? 有没有办法传递表达式数组,如果现在有什么最好的方法让这个东西工作?
在阅读了你的答案和评论后,我设法写了这个:
Expression<Func<Role, bool>> first = s => s.Id == 1;
Expression<Func<Role, bool>> second = s => s.RoleName != "null";
Expression<Func<Role, bool>> combined = Expression.Lambda<Func<Role, bool>>(Expression.And(first.Body, second.Body));
但是这给了我
附加信息:为lambda声明提供的参数数量不正确
答案 0 :(得分:1)
我建议你使用LinqKit来构建调用此方法的表达式。
以下是一个例子:
var predicate = PredicateBuilder.False<Product>();
foreach (string keyword in keywords)
{
string temp = keyword;
predicate = predicate.Or (p => p.Description.Contains (temp));
}
var products = productRepository.Get(predicate)
答案 1 :(得分:0)
可能你可以结合你的谓词