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))