2

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

2 に答える 2

2

三項演算子(?:)を使用できます。

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
}
于 2013-01-29T16:19:57.300 に答える
0

メソッドを 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; }
}
于 2013-01-29T16:06:27.670 に答える