C# 如何在ASP.NET MVC 3中处理复杂的查询?

C# 如何在ASP.NET MVC 3中处理复杂的查询?,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,虽然我将在这个问题中详细说明的问题非常具体,但我想它应该对像我这样的初学者程序员有所帮助。我有以下情况:在我正在设计的系统中,用户可以选择在数据库中设置搜索值(而不是像我之前所做的那样,将控制器操作的参数路由到数据库中对象的id),并具有以下字段: 发电厂(所有现有发电厂的下拉列表) 发电机组(具有多个选项的列表框,显示所选发电厂的发电机组) 期间(包含可用时间跨度的下拉列表,如“最近7天”和“上个月”) 开始和结束时间(如果用户不选择预定义的时间,而是希望定义特定的时间跨度) 如何将这些元

虽然我将在这个问题中详细说明的问题非常具体,但我想它应该对像我这样的初学者程序员有所帮助。我有以下情况:在我正在设计的系统中,用户可以选择在数据库中设置搜索值(而不是像我之前所做的那样,将控制器操作的参数路由到数据库中对象的id),并具有以下字段:

  • 发电厂(所有现有发电厂的下拉列表)
  • 发电机组(具有多个选项的列表框,显示所选发电厂的发电机组)
  • 期间(包含可用时间跨度的下拉列表,如“最近7天”和“上个月”)
  • 开始和结束时间(如果用户不选择预定义的时间,而是希望定义特定的时间跨度)
如何将这些元素放在页面上并在数据库中搜索指定的值?我的意思是,如何使这个字段成为一个可以发送到POST操作的对象,以便它可以与数据库进行比较并获得值?我试图做的包括为此创建一个编辑器模板(但我不明白我在做什么),我还尝试创建一个控制器来处理这个查询,这样我就可以在其他页面中呈现查询(但我最终在页面中创建了一个页面,采用了最好的“yo dawg I haerd u liek”风格)

你们能给我一些帮助吗,这样我就不必放弃做程序员而成为说唱歌手了?

这是一个很好的例子:


我认为它是用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
}

不过,你应该记住,如果用户没有填写过滤表单中的所有字段,你最好还是坚持说唱。。。对不起,开玩笑而已。你能详细说明一下你在实施这项计划时遇到的困难吗?是视图、视图模型还是控制器?我做了一些与你尝试的非常相似的事情,但我不太确定到底要解释什么。