首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >创建依赖于多个搜索字段的动态LINQ查询的最有效方法?

创建依赖于多个搜索字段的动态LINQ查询的最有效方法?
EN

Stack Overflow用户
提问于 2018-06-08 03:35:16
回答 2查看 141关注 0票数 1

我正在创建一个web应用程序,它根据输入的条件从数据库中检索数据。问题是我有10个不同的搜索字段,其中只有一个需要填充,其余的可以为空。

所以我要说的是:

代码语言:javascript
复制
Textbox1
Textbox2
..
..
Textbox10

我当前的查询是:

代码语言:javascript
复制
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)
    }
}

诸若此类。

如何在一个查询中构建此查询,并忽略没有值的文本框?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2018-06-08 03:48:54

正如你在问题中提到的,你只需要在每一步缩小你的查询范围。

代码语言:javascript
复制
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;
票数 2
EN

Stack Overflow用户

发布于 2018-06-08 04:41:18

另一种方法是在查询本身内执行null/empty检查,如果文本属性有值,则使用||运算符和条件检查,在括号内形成"sub子句“。因为||运算符会在一方求值为true时立即返回true,并且计算是从左到右完成的,所以始终将null/empty检查放在第一位。

这样,如果文本框文本为null或空,则每个“子句”返回true,否则将根据该文本框的文本值返回条件的计算结果。实际上,这将“忽略”null或空的文本框的text属性:

代码语言:javascript
复制
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));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50748975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档