C# 如何在ASP.NET MVC 3中处理复杂的查询?
虽然我将在这个问题中详细说明的问题非常具体,但我想它应该对像我这样的初学者程序员有所帮助。我有以下情况:在我正在设计的系统中,用户可以选择在数据库中设置搜索值(而不是像我之前所做的那样,将控制器操作的参数路由到数据库中对象的id),并具有以下字段:C# 如何在ASP.NET MVC 3中处理复杂的查询?,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,虽然我将在这个问题中详细说明的问题非常具体,但我想它应该对像我这样的初学者程序员有所帮助。我有以下情况:在我正在设计的系统中,用户可以选择在数据库中设置搜索值(而不是像我之前所做的那样,将控制器操作的参数路由到数据库中对象的id),并具有以下字段: 发电厂(所有现有发电厂的下拉列表) 发电机组(具有多个选项的列表框,显示所选发电厂的发电机组) 期间(包含可用时间跨度的下拉列表,如“最近7天”和“上个月”) 开始和结束时间(如果用户不选择预定义的时间,而是希望定义特定的时间跨度) 如何将这些元
- 发电厂(所有现有发电厂的下拉列表)
- 发电机组(具有多个选项的列表框,显示所选发电厂的发电机组)
- 期间(包含可用时间跨度的下拉列表,如“最近7天”和“上个月”)
- 开始和结束时间(如果用户不选择预定义的时间,而是希望定义特定的时间跨度)
我认为它是用MVC 2编写的,但可以很容易地转换为3。从您的问题中,我不太明白您在视图中过滤的是什么实体,所以我将其称为“实体”。 在您的控制器中,您应该有一个实体存储库(如果您不熟悉存储库模式,您应该查找它) 如果设置了该选项,则过滤应该不会太困难: 创建视图模型类,如下所示:
public class EntityFilterViewModel()
{
string PowerPlanet {get;set;}
string GeneratingUnits {get;set;}
string Period{get;set;} // Simplification, you should use timespan or something.
DateTime BeginTime {get;set;}
DateTime EndTime {get;set;}
}
接下来,使用如下控制器方法:
public ActionResult Filter(EntityFilterViewModel model)
{
var result = from e in _entityRepository.Entites
where e.PowerPlanet.Equals(model.PowerPlanet) &&
e.GeneratingUnits.Equals(model.GeneratingUnits) &&
e.Periond.Equals(model.Period)
// other filters you would want...
return View("List", result); // use the overload which takes a view name and a viewmodel object
}
不过,你应该记住,如果用户没有填写过滤表单中的所有字段,你最好还是坚持说唱。。。对不起,开玩笑而已。你能详细说明一下你在实施这项计划时遇到的困难吗?是视图、视图模型还是控制器?我做了一些与你尝试的非常相似的事情,但我不太确定到底要解释什么。