Contains(“”)是否有等效的“* ”?我正在使用一些通配符进行过滤,如果没有应用过滤器,那么我需要全部返回?
string[] filter = {1,2}; // This is dynamic could be filtered values or {} empty.
// This works for filtering by products (1,2)
db.Products.Where(x => filter.Contains(x.ProdId));
我真正需要实现的是:
// If the filter is empty get all results...if there is a filter passed the filter values in for select
db.Products.Where(x => x.ProdId.Contains(filter.Length == 0 ? "*" : filter);
答案 0 :(得分:3)
如果需要,您可以添加地点:
var query = db.Products.AsQueryable();
if (filter.Any())
query = query.Where(x => filter.Contains(x.ProdId));
// use query as needed
答案 1 :(得分:1)
使用此:
var result = db.Products.AsQueryable();
if(filter.Any())
result = result.Where(x => filter.Contains(x.ProdId));
如果过滤器不是唯一的条件,那根本不是问题,您可以为查询定义多个Where
:
var result = db.Products.Where(x => SomeCondition(x));
if(filter.Any())
result = result.Where(x => filter.Contains(x.ProdId));
答案 2 :(得分:0)
db.Products.Where(x => !filter.Any() || filter.Contains(x.ProdId))
虽然我喜欢列出的其他答案:
if(filter.Any())
result = result.Where(x => filter.Contains(x.ProdId));
在第一个示例中,它将遍历集合并确定过滤器确实具有结果中每个项目的项目。如果过滤器中有项目
,则第二个仅循环