我有一个我想根据一些信息过滤的对象列表 . 例如,可能具有不同水果的水果列表 . 从这个水果列表中我想获得一个符合特定标准的新水果的新列表 .
我有:
public List<Fruit> getFruitList(List<Fruit> allFruits, string fruitType, string fruitColor) {
List<Fruit> newFruits = allFruits.Where(f => f.typeOfFruit == fruitType)
.Where(f => f.fruitColor == fruitColor).ToList();
return newFruits;
}
但如果有人想要所有的水果类型,但又只想指定颜色(红色,意味着红苹果和草莓应出现在新列表中),会发生什么?这意味着fruitType参数可以作为“All”,它不会根据该条件过滤掉任何水果 .
但是,列表中的水果没有“全部”的typeOfFruit值,因此过滤器将不返回任何结果,因为没有水果具有该值“全部”
我看到这样的事情:
query = fruitColor == "All" ? query : query.Where(x => x.fruitColor == fruitColor);
query = fruitType == "All" ? query : query.Where(x => x.typeOfFruit == fruitType);
并以这种方式构建查询,但我不知道这个“查询”是什么类型的对象 . 它是一个字符串?或者是否有某种“查询”类可用于构建查询表达式?
4 回答
这应该是技巧,只需为您不想过滤的参数传递null或空字符串
如果你使用
System.Linq
那么它应该是IQueryable
. 你可以看到文档here .编辑:添加
Enumerable.Where
documentation here .一个简单的修改,以照顾 ALL 水果类型将..
f.typeOfFruit == fruitType || fruitType == "All"
部分将分别处理水果的特定标准OR
All您的LINQ可以进一步简化为
这演示了如何动态构建linq查询: