我在这里问一个关于在C#中使用LINQ进行高级过滤时代码会是什么样子的问题.我有Linq的经验,但这是出于我的理解.
假设我们有一个类Item具有的属性(string)Name,(bool)New以及(int)Price和用户必须输入他们的过滤器,并获得他们所需要的结果.
假设我们将5个对象放在list一个List of Items中.
new Item("Pen",true,12);
new Item("PostIt",false,35);
new Item("Phone",true,140);
new Item("Watch",true,5);
new Item("Lavalamp",false,2);
Run Code Online (Sandbox Code Playgroud)
现在我想要处理这些信息以获得...所有新的时间超过10.我知道我可以这样做
List<Item> Results = list.where(item => item.Price> 10 && item.New).ToList();
Run Code Online (Sandbox Code Playgroud)
但是,如果用户想要获得所有超过10的项目而不管是否是新的,那么该怎么办?我不能在运行时更改查询以满足需求,我不认为对每个可能的组合进行查询输入参数是一种正确的方法...有人能给我一个如何做到这一点的例子吗?
您可以定义基本查询
var result = list.Where(item=> item.Price > 10); //DON'T Call ToList() here
if(someCondition)
result = result.Where(item=> item.New);
//in the end you are calling
return result.ToList();
Run Code Online (Sandbox Code Playgroud)
就像@MikeEason说你不想调用ToList()你的第一个结果,因为这将执行查询.您的目标是构建复杂查询并仅执行一次.因此,当您返回结果时就会这样做.
| 归档时间: |
|
| 查看次数: |
291 次 |
| 最近记录: |