There are at least two errors in the code:
List<Expression<Func<Note, bool>>> filters = new List<Expression<Func<Note, bool>>>();
change it to
List<Func<Note, bool>> filters = new List<Func<Note, bool>>();
You don't need Expression trees here. You are using IEnumerable<> , not IQueryable<>
notes = dataAccess.GetList<Note>(pn => pn.ProjectVersionID == projectVersionID, filterExtensions.ToArray()) .Where(filters.ToArray()).Take(10).ToList();
There .Where() takes one predicate at a time. You could:
notes = dataAccess.GetList<Note>(pn => pn.ProjectVersionID == projectVersionID, filterExtensions.ToArray()) .Where(x => filters.All(x)).Take(10).ToList();
or various other solutions, for example:
var notesEnu = dataAccess.GetList<Note>(pn => pn.ProjectVersionID == projectVersionID, filterExtensions.ToArray()) .AsEnumerable(); foreach (var filter in filters) { notesEmu = notesEmu.Where(filter); } notes = notesEnu.Take(10).ToList();
Because all .Where() conditions are implicitly in && .
xanatos
source share