我知道这可能会是一个新手的问题。 有没有一种方法来选择取决于布尔值不同的搜索条件? 后来在代码中,我通过对象(alDisabledPrograms)要循环。 我知道的if / else是不正确的,我把在那里显示我怎么想,要进行处理。 我试图把这个值越大越/ 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<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();
插入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测试到哪里表达式本身。 使用内联annonymous函数,而不是单线式的,这样就可以使用正常的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();
将你的内心在哪里isDup
.Where(dp => dp.Element("ServerType").Value == (isDup ? currentColumn.Substring(0, currentColumn.Length - 1)
: currentColumn))