处理的最佳方式

时间:2015-08-03 14:18:37

标签: asp.net sql-server extjs web linq-to-sql

我正在编写一个模块(frontend extjs 4.2.1,后端asp.net mvc和EF)。我遇到一个小问题:     当用户单击搜索按钮时,将显示一个extjs面板,他/她可以填充文本字段内的一些空白。提交过滤器信息后,服务器端将使用适当的c#代码来处理它来过滤mssql数据库中的一些记录,这是我的问题:

如果用户没有在字段中插入任​​何内容,标准和最佳实践将是该字段将被忽略,但是,空白文本字段的值将是''我不能将其用作过滤字符串,例如: 有一个名为“sex”的文本字段,如果在字段中没有输入任何内容,传递给服务器的值将为'',如果我以这种方式写lambda表达式: var filter = x => x.sex ==“”;显然它不会起作用。你可能会说我可以使用if-else来调整这些东西。但如果我有很多领域,使用if-else将真的浪费时间。 那么,这样做的最佳做法是什么

2 个答案:

答案 0 :(得分:2)

有很多方法可以写出这个条件,但你所说的是条件,所以它并不是真的"浪费时间"为它编写代码。

例如,如果你有一个IEnumerable<T>而想要过滤它,你可能会这样做:

if (string.IsNullOrWhitespace(someFieldValue))
    result = result.Where(x => x.SomeField.Equals(someFieldValue));

或者,如果您正在构建表达式,则可以有条件地定义表达式。这可能看起来像这样(这完全是徒手画的,所以我不确定它会像这样工作,但你明白了):

var filter = string.IsNullOrWhitespace(someFieldValue) ?
             x => true :
             x => x.SomeField.Equals(someFieldValue);

您可以在一些私有帮助器方法后面抽象这一点,以便消耗代码更清晰,您可以重构常用的过滤器以减少重复等。但是在一天结束时,您的代码所表达的逻辑是:< / p>

  

在特定的已知状态下,做一件事。在其他州,改为做别的事。

这是条件陈述。

答案 1 :(得分:0)

在提交给服务器的请求之前,可以在客户端阻止它。

在服务器端,您可以从服务层抽象验证部分。

在我的典型Spring MVC应用程序中 -
1.请求转到控制器 2.Controller委托给Validator。
3.如果成功,控制器委托服务层 4.如果失败,控制器会将用户重定向到错误页面。