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

本文关键字:条件 if where linq 何使用 查询 | 更新日期: 2023-09-27 18:09:01

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

我的文本值:

  1. 制造商

  2. 项目代码

  3. 零件号

条件:

  1. 如果我搜索上面的任何一个,我应该会得到的结果

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

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

我的代码如下

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子句?请找出解决方案。。

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

他想去掉if语句,并将其全部写成linq查询。我想你想要这样的

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

您只需标记多个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个参数,你会得到合适的结果。

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

这将在一个地方为您提供制造商、项目代码和零件的任何结果。