public static IQueryable <T> Filter <T>(this IQueryable <T> queryable, Filter filter) { if (filter != null && filter.Logic != null) { // 收集所有过滤器的平面列表 var filters = filter.All(); // 获取所有过滤器值作为数组(Dynamic Linq的Where方法需要) var values = filters.Select(f => f.Value).ToArray(); // 创建谓词表达,例如 Field1 = @ 0 And Field2> @ 1 string predicate = filter.ToExpression(filters); // 使用Dynamic Linq的Where方法过滤数据 queryable = queryable.Where(predicate, values); } return(queryable); }
public static IQueryable <T> Filter <T>(this IQueryable <T> queryable, Filter filter) { if (filter != null && filter.Logic != null) { // Collect a flat list of all filters var filters = filter.All(); // Get all filter values as array (needed by the Where method of Dynamic Linq) var values = filters.Select(f => f.Value).ToArray(); // Create a predicate expression e.g. Field1 = @0 And Field2 > @1 string predicate = filter.ToExpression(filters); // Use the Where method of Dynamic Linq to filter the data queryable = queryable.Where(predicate, values); } return(queryable); }