linq中的高级过滤

Det*_*yne 1 c# linq

我在这里问一个关于在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的项目而不管是否是新的,那么该怎么办?我不能在运行时更改查询以满足需求,我不认为对每个可能的组合进行查询输入参数是一种正确的方法...有人能给我一个如何做到这一点的例子吗?

myb*_*ame 5

您可以定义基本查询

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()你的第一个结果,因为这将执行查询.您的目标是构建复杂查询并仅执行一次.因此,当您返回结果时就会这样做.

  • 值得一提的是,这种方法有效地*构建了*查询,它只在遇到`.ToList()`时执行. (2认同)