如果可能,将if条件合并到单个LINQ语句中

我目前正在使用ASP.NET MVC和Entity Framework Code First使用存储库模式来显示具有分页的简单用户列表。 我添加了过滤该列表的function,允许最终用户从两个下拉菜单和两个带开始和结束日期的文本框中选择条件。

有没有比下面的代码更好的方法来执行此操作,我必须测试所有可能的参数组合,以便编写适当的LINQ查询:

public IEnumerable GetAllByCondition(int? condition1, int? condition2, DateTime? startDate, DateTime? endDate) { if (condition1.HasValue && startDate.HasValue && endDate.HasValue) { return Database.Set().Where(x => x.Condition1 == condition1.Value && x.Date > startDate.Value && x.Date <= endDate.Value).ToList(); } if (condition1.HasValue && condition2.HasValue) { return Database.Set().Where(x => x.Condition1 == condition1.Value && x.Condition2 == condition2.Value).ToList(); } if (condition1.HasValue) { return Database.Set().Where(x => x.Condition1 == condition1.Value).ToList(); } .... and the list goes on } 

如果我将来再添加一个条件,这很快就会变得臃肿。

使用查询撰写的事实 – 您可以继续调用添加更多条件的位置:

 var query = Database.Set(); if (condition1.HasValue) { query = query.Where(x => x.Condition1 == condition1.Value); } if (condition2.HasValue) { query = query.Where(x => x.Condition2 == condition2.Value); } ... return query.ToList();