我正在创建一个Web应用程序,它根据输入的条件从数据库中检索数据。 问题是我有10个不同的搜索字段,只需要填写其中一个,其余的可以为空。
所以我拥有的是:
Textbox1
Textbox2
..
..
Textbox10
我目前的查询是:
checked = false;
if (Textbox1.Text != null)
{
result = //query here
checked = true;
}
if (Textbox2.Text != null)
{
if(checked==false)
{
result = //new query here
checked = true;
}
else
{
result = results.Where(...new query to filter Textbox2 from previous
query)
}
}
等等。
如何在一个查询中构建它并忽略没有值的文本框?
由于
答案 0 :(得分:1)
正如您在问题中提到的,您只需要缩小每个步骤的查询范围。
var result = //query here
if (Textbox1.Text != null)
{
result = result.Where(r=> r.x == Textbox1.Text);
}
if (Textbox2.Text != null)
{
result = result.Where(r=> r.y == Textbox2.Text);
}
...
return result;
答案 1 :(得分:0)
另一种方法是在查询本身内进行null / empty检查,使用||
运算符以及条件检查text属性是否有值,在括号内形成" sub条款&#34 ;.因为||
运算符只要一方评估为true就会返回true
,并且评估从左到右完成,所以始终先将null
/空检查。
通过这种方式,每个"子句"如果文本框文本为true
或为空,则返回null
,否则它将根据该文本框的文本值返回条件评估。实际上,这"忽略"文本框的文本属性为null
或为空:
var result = data.Where(d =>
(string.IsNullOrEmpty(Textbox1.Text) || d.X == Textbox1.Text) &&
(string.IsNullOrEmpty(Textbox2.Text) || d.Y == Textbox2.Text) &&
(string.IsNullOrEmpty(Textbox3.Text) || d.Z == Textbox3.Text));