【发布时间】:2011-12-30 13:55:52
【问题描述】:
我目前正在使用 ASP.NET MVC 和 Entity Framework Code First 使用存储库模式来显示具有分页的用户的简单列表。我通过允许最终用户从两个下拉列表和两个带有开始和结束日期的文本框中选择条件来添加过滤该列表的功能。
有没有比下面的代码更好的方法,我必须测试所有可能的参数组合才能编写适当的 LINQ 查询:
public IEnumerable<User> GetAllByCondition(int? condition1, int? condition2, DateTime? startDate, DateTime? endDate)
{
if (condition1.HasValue && startDate.HasValue && endDate.HasValue)
{
return Database.Set<User>().Where(x => x.Condition1 == condition1.Value && x.Date > startDate.Value && x.Date <= endDate.Value).ToList();
}
if (condition1.HasValue && condition2.HasValue)
{
return Database.Set<User>().Where(x => x.Condition1 == condition1.Value && x.Condition2 == condition2.Value).ToList();
}
if (condition1.HasValue)
{
return Database.Set<User>().Where(x => x.Condition1 == condition1.Value).ToList();
}
.... and the list goes on
}
如果我以后再添加一个条件,这很快就会变得臃肿。
【问题讨论】:
-
在你的代码中 if condition1.HasValue 只在第一个 if 语句执行时才为真,否则没有一个 if 语句没有执行,为什么要写这段代码?
-
只是为了说明一点。我编辑了它。
标签: c# asp.net-mvc linq ef-code-first