【问题标题】:Searching in MVC application在 MVC 应用程序中搜索
【发布时间】:2012-05-20 09:03:13
【问题描述】:

我有一个页面,其中为用户提供了四个 搜索 字段。我想取字段的交集并显示结果。但是,用户不需要填写所有字段。

在我的控制器中,我有以下代码。

string subject = (string)Session[d.sessionSearchSubject];
string courseNumber = (string)Session[d.sessionSearchCourseNum];
string yearLev = (string)Session[d.sessionSearchYearLev];
string period = (string)Session[d.sessionSearchPer];


if (!(subject.Equals("") && courseNumber.Equals("") && yearLev.Equals("") && period.Equals("")))
{
   db.Courses.Where(a => a.subject.Equals(subject) && a.coursenumber.Equals(courseNumber) &&  a.period.Equals(period...
}
else if (!(subject.Equals("") && courseNumber.Equals("") && yearLev.Equals("")))
{
  // Query the database. 
}
else if (!(subject.Equals("") && courseNumber.Equals("") && period.Equals("")))
{
  // Query the database. 
}
else if (!(subject.Equals("") && yearLev.Equals("") && period.Equals("")))
...

如您所见,会有很多 if 语句。我想知道是否有更好的方法来做到这一点?即,如果字段为空,则忽略该字段的单个查询语句。或者如果我可以用相当于“任何”的东西替换空字符串???

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 linq entity-framework-4


    【解决方案1】:

    您可以将结果分成四个语句,分别对应四个条件:

    var results = db.Courses;
    if(!string.IsNullOrEmpty(subject))
        results = results.Where(c => c...);
    if(!string.IsNullOrEmpty(courseNumber))
       results = results.Where(c => c...);
    ...etc...
    

    保持简洁和可扩展,同时只将条件附加到必要的 sql 查询中。

    【讨论】:

      【解决方案2】:

      你不能把这个逻辑放到单个 LINQ 语句中吗?比如:

      var results = db.Courses
          .Where(c => (c.subject == subject && c.subject != "")
              || (c.coursenumber == courseNumber && c.coursenumber != "")
              || (c.yearLev == yearLev && c.yearLev != "")
              || (c.period == period && c.period != ""))
          .ToList();
      

      【讨论】:

        【解决方案3】:

        为什么你的控制器中有所有这些逻辑?

        您应该在模型中填充视图字段,然后在模型中拥有一个函数来为您处理此逻辑。 IE。在您的模型中有一个名为 IsCourseValid() 的函数,其中包含您提供的逻辑。然后,您可以在 Controller 中调用此模型方法并路由到适当的视图(Controller 的用途),如果您只是查询数据库,请通过 Model 执行此操作。

        您当前拥有的模式是胖控制器瘦模型,您是否应该拥有瘦控制器胖模型(所有逻辑都在模型中完成,控制器将您路由到正确的视图)。

        提示:

        你可以使用string.IsNullOrEmpty(subject)而不是!subject.Equals("")

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-10
          • 1970-01-01
          • 1970-01-01
          • 2014-06-21
          相关资源
          最近更新 更多