【发布时间】:2015-09-30 09:57:33
【问题描述】:
如何根据不同的变量状态在 linq 中链接“Where”子句。 E,g;年龄范围复选框(21-30、31-40、41-50、51-60、60 >)
我们有一个List<People>‘People’,我们需要根据复选框对其进行过滤。假设 List 不能只是一个 IEnumerable,因为它已经被评估了
除了这样做:
List<People> filteredPeople = new List<people>();
if(CB1.checked)
filteredPeople = filteredPeople.Union(People.Where(inTheirTwenties)) //assuming method inTheir20s filters correct
if(CB2.checked)
filteredPeople = filteredPeople.Union(People.Where(inTheirThirties)) ;
//...and so on
有没有更好的方法解决这个问题?
【问题讨论】:
-
为什么是
Union?可以直接应用Where方法filteredPeople = filteredPeople.Where(p => p.Age >=21 && p.Age <=30) -
一个列表实现了
IEnumerable,实际上有很多视图集合没有。所以它可以而且是它是否已经被评估过。你在想IQueryable -
这段代码被破坏了。同时检查 CB1 和 CB2 不会返回 20s 和 30s。由于您在通话之间更改
filteredPeople。事实上,您的代码目前返回所有People无论如何。
标签: c# linq linq-to-objects