我有3个搜索文本框值。我需要为每个变量检查string.isnullorEmpty
,并且必须与linq查询进行比较。
我的文字值:
制造商
项目代码
PARTNO
条件:
如果我搜索上述任何一项,我应该得到结果
如果我输入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子句?请找出解决方案..
答案 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提供任何结果,并将其放在一个地方。