链接 Linq Where 子句
Chaining Linq Where clauses
你会如何根据不同的变量状态在 linq 中链接“Where”子句。
E,g;年龄范围复选框(21-30、31-40、41-50、51-60、60 >)
我们有一个 List<People>
‘People’,我们需要根据选中的框对其进行过滤。假设列表不能只是一个 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)) ...);
链接未知数量的 .Where()
个使用 OR
的子句会导致代码冗长且难以阅读。幸运的是,在您的场景中,您可以将其转换为一系列 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 查询,这种类型的代码还可以通过创建一个没有多个 true
和 [=16] 的优雅 WHERE 子句来简化对数据库的访问=] 通过网络发送。当然,您不能使用 inTheirTwenties(Person)
访问 SQL 服务器,而是可以执行以下操作:
filteredPeople.Where(p => !(p.Age >= 21 && p.Age <=30));
你会如何根据不同的变量状态在 linq 中链接“Where”子句。 E,g;年龄范围复选框(21-30、31-40、41-50、51-60、60 >)
我们有一个 List<People>
‘People’,我们需要根据选中的框对其进行过滤。假设列表不能只是一个 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)) ...);
链接未知数量的 .Where()
个使用 OR
的子句会导致代码冗长且难以阅读。幸运的是,在您的场景中,您可以将其转换为一系列 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 查询,这种类型的代码还可以通过创建一个没有多个 true
和 [=16] 的优雅 WHERE 子句来简化对数据库的访问=] 通过网络发送。当然,您不能使用 inTheirTwenties(Person)
访问 SQL 服务器,而是可以执行以下操作:
filteredPeople.Where(p => !(p.Age >= 21 && p.Age <=30));