Linq:有条件地向WHERE子句添加条件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (75)
(from u in DataContext.Users
       where u.Division == strUserDiv 
       && u.Age > 18
       && u.Height > strHeightinFeet  
       select new DTO_UserMaster
       {
         Prop1 = u.Name,
       }).ToList();

如果提供了年龄,我希望将其添加到查询中。

如果要使用SQL查询来完成这一任务,我将使用StringBuilder将其附加到主strSQL查询中。但是在Linq中,我只能考虑使用一个if条件,其中我将编写三个相同的查询,每个if块都有一个附加条件。有更好的方法吗?

提问于
用户回答回答于
var query = from u in DataContext.Users
   where u.Division == strUserDiv 
   && u.Age > 18
   && u.Height > strHeightinFeet
   select u;

if (useAge)
   query = query.Where(u => u.Age > age);

if (useHeight)
   query = query.Where(u => u.Height > strHeightinFeet);

// Build the results at the end
var results = query.Select(u => new DTO_UserMaster
   {
     Prop1 = u.Name,
   }).ToList();

这仍然只会导致对数据库的一次调用,这将与一次编写查询一样有效。

用户回答回答于
bool? age = null

(from u in DataContext.Users
           where u.Division == strUserDiv 
           && (age == null || (age != null && u.Age > age.Value))
           && u.Height > strHeightinFeet  
           select new DTO_UserMaster
           {
             Prop1 = u.Name,
           }).ToList();

或者您可以切换到Linq的方法语法,并使用if条件将表达式附加到WHERE子句。

扫码关注云+社区

领取腾讯云代金券