如何使用linq查询生成没有多个if条件的where条件
本文关键字:条件 if where linq 何使用 查询 | 更新日期: 2023-09-27 18:09:01
我有3个搜索文本框值。我需要为每个变量检查string.isnullorEmpty
,并且必须与linq查询进行比较。
我的文本值:
-
制造商
-
项目代码
-
零件号
条件:
-
如果我搜索上面的任何一个,我应该会得到的结果
-
如果我输入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));
这将在一个地方为您提供制造商、项目代码和零件的任何结果。