我知道这可能是一个新手问题。有没有办法根据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();
答案 0 :(得分:14)
使用您的特定代码,答案非常简单:
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<XElement> roles = xlServerRoles.Descendants("ServerRole");
if (isDup)
{
roles = roles.Where(dp => ...);
}
else
{
roles = roles.Where(dp => ...);
}
var alDisabledPrograms = roles.Descendants(...)
...
或者你可以使用条件运算符来构造正确的谓词:
var filter = isDup ? (Func<XElement, bool>)(dp => ...)
: (Func<XElement, bool>)(dp => ...);
var alDisabledPrograms = xlServerRoles.Descendants("ServerRole")
.Where(filter)
.Descendants("ProgramName")
.Select(p => p.Value)
.ToList();
答案 1 :(得分:2)
将isDup插入where子句:
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();
我认为这样做。
答案 2 :(得分:1)
将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();
答案 3 :(得分:1)
您可以构建如下查询:
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();
答案 4 :(得分:0)
在循环开始之前做一次:
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();
答案 5 :(得分:0)
将你的名字放在哪里
.Where(dp => dp.Element("ServerType").Value == (isDup ? currentColumn.Substring(0, currentColumn.Length - 1)
: currentColumn))