【发布时间】:2013-01-18 08:02:22
【问题描述】:
我有一个包含Article 对象的列表。
这个对象的参数是
类别、描述、状态、类
用户可以使用他想要的组合过滤列表。仅描述,或类别 + 类,依此类推。
所以如果用户选择一个标准,我会得到一个 int >= 0,否则我会得到 -1。
例如,如果他选择使用Status 和Category 进行过滤,我会得到
FilterCategory = x,FilterDescription = -1,FilterStatus = y,FilterClass = -1
我过滤列表的方法如下:
if (FilterCategory != -1)
list = list.Where(a => a.Category == FilterCategory);
if (FilterDescription != -1)
list = list.Where(a => a.Description == FilterDescription);
if (FilterStatus != -1)
list = list.Where(a => a.Status == FilterStatus);
if (FilterClass != -1)
list = list.Where(a => a.Class == FilterClass);
这样,我必须对列表进行 4 次迭代,对于很多项目来说效率不高。我会浏览一次列表,然后在一个唯一的位置检查 4 个条件。但我不知道如何在特定条件下做到这一点!= -1。
谢谢
【问题讨论】:
-
Linq 是惰性的,因此您不会使用代码对列表进行 4 次迭代。直到您迭代它或使用必须像
Count或Max一样迭代它的 Linq 扩展,才会发生迭代。