Для LINQ к объектам:
public static class FilterExt
{
public static IEnumerable<TItem> ApplyFilter<TProp>(this IEnumerable<TItem> list, List<TProp> filter, Func<TItem, TProp> prop)
{
if (filter == null || filter.Count == 0)
{
return list;
}
return list.Where(x => filter.Contains(prop.Invoke(x)));
}
}
...
var filtered = bidVehicles
.ApplyFilter(MakeList, x => x.Vehicle.Make)
.ApplyFilter(TrimList, x => x.Vehicle.Trim).ToList();
Если вы используете EF (значит bidVehicles
- это IQueryable
), вы должны написать выражение для каждого свойства, потому что вам нужен полный предикат Expression<Func<BidVehicle, bool>>
, а не просто Func<BidVehicle, TProp>
.