0

Linq to XML を使用して xml を作成していますが、値は Product オブジェクトにあります。以下の xml を生成する c# コード スニペットを参照してください。

new XElement(xn + "Products",
                    from p in products
                    select
                        new XElement(xn + "Product",
                            new XElement(xn + "ProductId", p.Id),
                            new XElement(xn + "Name", p.Name),
                            new XElement(xn + "Description", new XCData(p.LongDescription.StripHtml())),
                            new XElement(xn + "CategoryExternalId",
                                from c in categories
                                where c.Name == p.PrimaryCategory
                                select c.CategoryId),
                            new XElement(xn + "UPCs",
                                from s in p.SKU
                                select
                                    new XElement(xn + "UPC", s.UPC))))
                        ));

課題はUPCです。商品の SKU 配列に UPC エントリがない場合、UPCs xml ノードを作成したくありません。上記のコード スニペットの iepSKU は、文字列 UPC フィールドの配列です。したがって、単一の UPC フィールドが存在しない場合、つまりp.SKU.Count ==0の場合、UPC xml ノード要素をまったく作成したくありません。

クラス モデルのスニペットを参照してください。

public class Product
{
   public string Name { get; set; }
   public string Description { get; set; }
   public List<SKU> SKU { get; set; }
}

public class SKU
{
    public string UPC { get; set; }
    public string Name { get; set; }
    public string Overlap { get; set; }
    public string Productline { get; set; }
}
4

1 に答える 1

2

それをクエリ内に配置します。

(p.SKU.Count > 0 ? 
    new XElement("UPCs",
        from s in p.SKU
        select new XElement( "UPC", s.UPC)) :
    null)

クエリの簡略版を作成しました。

var xml = new XElement("Products",
                    from p in products
                    select
                        new XElement("Product",
                            new XElement("ProductId", p.Id),
                            new XElement("Name", p.Name),
                            (p.SKU.Count > 0 ? new XElement("UPCs",
                                                    from s in p.SKU
                                                    select new XElement("UPC", s.UPC))
                                                : null)));

そして、そのような入力の場合:

var products = new List<Product> {
    new Product {
        Id = 1,
        Name = "TestName",
        SKU = new List<SKU> {
            new SKU { Name = "test", UPC = "UPC1" },
            new SKU { Name = "test2", UPC = "UPC2" }
        }
    },
    new Product {
        Id = 1,
        Name = "TestName",
        SKU = new List<SKU> { }
    }
};

出力は次のとおりです。

<Products>
  <Product>
    <ProductId>1</ProductId>
    <Name>TestName</Name>
    <UPCs>
      <UPC>UPC1</UPC>
      <UPC>UPC2</UPC>
    </UPCs>
  </Product>
  <Product>
    <ProductId>1</ProductId>
    <Name>TestName</Name>
  </Product>
</Products>

それはまさにあなたが達成しようとしていることですよね?

于 2013-03-12T19:31:49.320 に答える