如何使用linq查询生成没有multiple if条件的where条件

时间:2016-09-27 17:17:20

标签: c# linq where

我有3个搜索文本框值。我需要为每个变量检查​​string.isnullorEmpty,并且必须与linq查询进行比较。

我的文字值:

  1. 制造商

  2. 项目代码

  3. PARTNO

  4. 条件:

    1. 如果我搜索上述任何一项,我应该得到结果

    2. 如果我输入3个盒子值,我应该得到结果

    3. 如果我输入任何2,那么我应该得到结果。

    4. 我的代码如下

      if (!string.IsNullOrEmpty(manufacturer))
              {
                  var filteredResult = _entity.MaterialMasters.Where(x => x.Manufacturer == manufacturer);
              }
      if (!string.IsNullOrEmpty(projectcode))
              {
                  var filteredResult = _entity.MaterialMasters.Where(x => x.ProjectCode== projectcode);
              }
      if (!string.IsNullOrEmpty(part))
              {
                  var filteredResult = _entity.MaterialMasters.Where(x => x.Part== part);
              }
      

      为了避免多个条件,如何为此创建动态where子句?请找出解决方案..

3 个答案:

答案 0 :(得分:3)

他希望摆脱if语句并将其全部写为linq查询。我想你想要这样的东西

.Where(
s =>
(string.IsNullOrEmpty(manufacturer) | (s.Manufacturer == manufacturer)) &&
(string.IsNullOrEmpty(projectcode) | (s.ProjectCode == projectcode)) &&
(string.IsNullOrEmpty(part) | (s.Part== part))
).ToList();

答案 1 :(得分:1)

您只需标记多个Where子句

即可
var filteredResult = _entity.MaterialMasters;
if (!string.IsNullOrEmpty(manufacturer))

    filteredResult = filteredResult.Where(x => x.Manufacturer == manufacturer);
}
if (!string.IsNullOrEmpty(projectcode))

    filteredResult = filteredResult.Where(x => x.ProjectCode == projectcode);
}
if (!string.IsNullOrEmpty(part))

    filteredResult = filteredResult.Where(x => x.Part == part);
}

它们将累积工作,这意味着您可以提供1,2或3个参数,并且您将获得适当的结果。

答案 2 :(得分:0)

var filteredResult =
               _entity.Where(
                ent =>
                (!string.IsNullOrEmpty(manufacturer) && ent.Manufacturer == manufacturer)
                || (!string.IsNullOrEmpty(projectcode) && ent.ProjectCode == projectcode)
                || (!string.IsNullOrEmpty(part) && ent.Part == part));

这将为制造商,projectCode提供任何结果,并将其放在一个地方。