繁体   English   中英

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

[英]how to generate where condition without multiple if condition using linq query

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

我的文字值:

  1. 生产厂家

  2. 项目编号

  3. PARTNO

条件:

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

他想摆脱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));

这样一来,您可以获得有关制造商,projectCode和零件的任何结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM