我正在创建一个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)
}
}
诸若此类。
如何在一个查询中构建此查询,并忽略没有值的文本框?
谢谢
发布于 2018-06-08 03:48:54
正如你在问题中提到的,你只需要在每一步缩小你的查询范围。
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;
发布于 2018-06-08 04:41:18
另一种方法是在查询本身内执行null/empty检查,如果文本属性有值,则使用||
运算符和条件检查,在括号内形成"sub子句“。因为||
运算符会在一方求值为true时立即返回true
,并且计算是从左到右完成的,所以始终将null
/empty检查放在第一位。
这样,如果文本框文本为null
或空,则每个“子句”返回true
,否则将根据该文本框的文本值返回条件的计算结果。实际上,这将“忽略”null
或空的文本框的text属性:
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));
https://stackoverflow.com/questions/50748975
复制相似问题