Tho*_*mas 4 c# linq asp.net-mvc ef-code-first
我目前正在使用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
}
Run Code Online (Sandbox Code Playgroud)
如果我将来再添加一个条件,这很快就会变得臃肿.
Jon*_*eet 13
使用查询撰写的事实 - 您可以继续调用Where以添加更多条件:
var query = Database.Set<User>();
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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
534 次 |
| 最近记录: |