我正在开发一个C#桌面应用程序。我想创建一个搜索功能。现在问题是我使用了大约8个文本框。可以填充文本框的不同排列,并且生成的文本框中包含'条件应仅包括那些非null的文本框值。现在,一种可悲的方式是使用一个“如果”和“其他”的方式。这显然是费力的。还有其他办法吗?
答案 0 :(得分:0)
只需要一个填充WHERE的查询就可以使用所有这样的参数
select ...
from ...
WHERE
(firstNameColumn=:firstNameParam or :firstNameParam is null)
AND (lastNameColumn=:lastNameParam or :lastNameParam is null)
AND (...)
答案 1 :(得分:0)
我想首先检查是paramtere null,然后用它来与列值进行比较。
由于您在C#中生成查询,请尝试使用默认条件where 1=1
的明期中的旧中文方法,以避免检查您是否已经有了第一个条件:)
string query = "select ... from ... join ... on ... where 1=1";
//suposedly you have value of one search box in variable called "item_name"
if(string.IsNullOrWhiteSpace(item_name) == false)
{
query += " and Order_Line.Name ='" + item_name + "'";
}
以及其他领域。
你要做的是为了避免ifs不是一个好方法。看看这个:
string query = " select ... where Order_Line.Name = '" + item_name + "'";
如果item_name实际为空,那么结果字符串是什么?
编辑:结果查询将是
where Order_Line.Name = '' or Order_Line.Name is null
这不是你想要的。如果该搜索字段为空,则需要每一行,并且它不应该对搜索产生影响。这就是为什么你需要条件才能看到你将首先在where
子句中包含这一列。