链接Linq Where子句
本文关键字:子句 Where Linq 链接 | 更新日期: 2023-09-27 18:15:10
如何根据不同的变量状态链接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
有更好的方法吗?
我将把所有这些都打包到一个Where
语句中,并更新inTheirTwenties
方法,以便像这样获取个人:
filteredPeople.Where(x => (CB1.checked && inTheirTwenties(x))
|| (CB2.checked && inTheirThirties(x)) ...);
链接使用OR
的未知数量的.Where()
子句可能导致冗长且难以阅读的代码。幸运的是,在您的场景中,您可以将其转换为一系列AND
表达式,从而呈现出更具可读性的代码批。
var filteredPeople = new List<Person>();
if(!checkBox1) filteredPeople = filteredPeople.Where(p => !inTheirTwenties(p));
if(!checkBox2) filteredPeople = filteredPeople.Where(p => !inTheirThirties(p));
如果这是一个LINQ-to-SQL查询,这种类型的代码还可以通过创建一个优雅的WHERE子句来简化传递到数据库的内容,而不需要通过网络发送大量的true
和false
。当然,你不能使用inTheirTwenties(Person)
来访问SQL Server,而是可以这样做:
filteredPeople.Where(p => !(p.Age >= 21 && p.Age <=30));