Linq if / else条件?
我知道这可能是一个新手问题。 有没有办法根据bool值选择不同的搜索条件? 稍后在代码中,我想循环遍历该对象(alDisabledPrograms)。 我知道if / else是不正确的,我把它放在那里以表明我希望如何处理。 我试图将其置于更大的if / else条件中,但之后无法循环遍历alDisabledPrograms。 思考?
var alDisabledPrograms = xlServerRoles.Descendants("ServerRole") if(isDup) { .Where(dp => dp.Element("ServerType").Value == currentColumn.Substring(0, currentColumn.Length - 1)) } else { .Where(dp => dp.Element("ServerType").Value == currentColumn) } .Descendants("ProgramName") .Select(p => p.Value) .ToList();
使用您的特定代码,答案非常简单:
string targetColumn = isDup ? currentColumn.Substring(0, currentColumn.Length - 1) : currentColumn; var alDisabledPrograms = xlServerRoles.Descendants("ServerRole") .Where(dp => dp.Element("ServerType").Value == targetColumn) .Descendants("ProgramName") .Select(p => p.Value) .ToList();
但一般来说,要应用非常不同的查询,您可以使用:
IEnumerable roles = xlServerRoles.Descendants("ServerRole"); if (isDup) { roles = roles.Where(dp => ...); } else { roles = roles.Where(dp => ...); } var alDisabledPrograms = roles.Descendants(...) ...
或者你可以使用条件运算符来构造正确的谓词:
var filter = isDup ? (Func)(dp => ...) : (Func)(dp => ...); var alDisabledPrograms = xlServerRoles.Descendants("ServerRole") .Where(filter) .Descendants("ProgramName") .Select(p => p.Value) .ToList();
在where子句中插入isDup:
var alDisabledPrograms = xlServerRoles.Descendants("ServerRole") .Where(dp => isDup ? (dp.Element("ServerType").Value == currentColumn.Substring(0, currentColumn.Length - 1)) : (dp.Element("ServerType").Value == currentColumn)) .Descendants("ProgramName") .Select(p => p.Value) .ToList();
我想这会做。
将isDup测试移动到Where表达式本身。 使用内联匿名函数而不是单行表达式,以便您可以使用普通的if / else语句。
像这样:
var alDisabledPrograms = xlServerRoles.Descendants("ServerRole") .Where(dp => { if (isDup) { return dp.Element("ServerType").Value == currentColumn.Substring(0, currentColumn.Length - 1)) } else { return dp.Element("ServerType").Value == currentColumn) }) .Descendants("ProgramName") .Select(p => p.Value) .ToList();
你可以像这样构造查询:
var query = xlServerRoles.Descendants("ServerRole"); if(isDup) { query = query.Where(dp => dp.Element("ServerType").Value == currentColumn.Substring(0, currentColumn.Length - 1)) } else { query = query.Where(dp => dp.Element("ServerType").Value == currentColumn) } var alDisabledPrograms = query.Descendants("ProgramName").Select(p => p.Value).ToList();
在循环开始之前做一次:
string serverType = currentColumn; if(isDup) serverType = currentColumn.Substring(0, currentColumn.Length - 1); var alDisabledPrograms = xlServerRoles.Descendants("ServerRole") .Where(dp => dp.Element("ServerType").Value == serverType ) .Descendants("ProgramName") .Select(p => p.Value) .ToList();
把你放在哪里
.Where(dp => dp.Element("ServerType").Value == (isDup ? currentColumn.Substring(0, currentColumn.Length - 1) : currentColumn))