C#谓词列表传递给Linq Where子句

时间:2015-04-29 20:37:09

标签: c# linq where predicate

我有一个很长的Linq Where子句,我希望用谓词列表填充。

List<Expression<Func<Note, bool>>> filters = new List<Expression<Func<Note, bool>>>();

filters.Add(p => p.Title != null && p.Title.ToLower().Contains(searchString));
filters.Add(p => p.Notes != null && p.Notes.ToLower().Contains(searchString));
filters.Add(GlobalSearchUser((List < User > users = new List<User>() { p.user1, p.user2, p.user3, p.user4 }), searchString));

notes = dataAccess.GetList<Note>(pn => pn.ProjectVersionID == projectVersionID, filterExtensions.ToArray())
      .Where(filters.ToArray()).Take(10).ToList();

但是我收到了这个错误:

  

无法转换为'System.Linq.Expressions.Expression<System.Func<project.Contracts.DTOs.Note,bool>>[]' to 'System.Func<project.Contracts.DTOs.Note,bool>'

.where子句中的错误。拉出.where编译得很好。

1 个答案:

答案 0 :(得分:5)

我认为使用AnyAll Linq方法可以简化和缩短Hogan的优秀答案。

获取满足所有条件的物品:

var resultAll = listOfItems.Where(p => filters.All(f => f(p)));

并获得满足任何条件的物品:

var resultAny = listOfItems.Where(p => filters.Any(f => f(p)));
相关问题