Linq to XML - 根据 if 语句设置 Xelement 值

本文关键字:语句 设置 Xelement if 根据 to XML Linq | 更新日期: 2023-09-27 17:56:16

我正在使用linq to xml创建一个xml。

在一个元素中,我想根据语句控制元素的值

<Type>Query</Type>

"查询"取决于对象中的几个变量,所以我必须运行 1-2 if 语句。(这是正在编写的大型xml的一部分)我知道我正在写的东西不可能以这种方式,我正在寻找一种以任何合法方式做到这一点的方法

new XElement("Parameters",
from p in parameters.ParametersList
select
    new XElement("Parameter", 
        new XAttribute("ID", "??"),
        new XAttribute("Name", p.Name),
        new XElement("Prompt", p.Prompt),
        if (p.validvalues.count == 0)
            new XElement("Type", "None")
        else if (p.something == something)
               new XElement("Type, "List")

Linq to XML - 根据 if 语句设置 Xelement 值

您可以使用三元运算符 (?:):

new XElement("Type", (p.validvalues.Count() == 0) ? "None" : "List")

如果您有复杂的条件或许多可能的值,则可以提取获取此节点值的方法:

new XElement("Type", GetParameterType(p))

private string GetParameterType(Parameter p)
{
    if (p.validvalues.Count() == 0)
        return "None";
    if (p.something == something)
        return "List";
    // etc
}
我认为

没有什么能阻止您将方法插入 XElement 构造函数并添加适合您的逻辑。

class Program
{
    static void Main(string[] args)
    {
        var parameters = new List<MyParam> { 
            new MyParam { Name="bla", Size=1 }, 
            new MyParam { Name="lala", Size=10 }, 
        };
        var xml = new XElement("Parameters",
            from p in parameters
            select new XElement("Parameter",
                 new XAttribute("Name", p.Name),
                 ConditionalElement(p)
                )
        );
    }
    private static XElement ConditionalElement(MyParam arg)
    {
        if (arg.Size < 5)
        {
            return new XElement("Type", "Small");
        }
        else
        {
            return new XElement("Type", "Big");
        }
    }
}
class MyParam
{
    public int Size { get; set; }
    public string Name { get; set; }
}