簡體   English   中英

Linq查詢以XML返回不同的值

[英]Linq query to return distinct values in xml

我有一個具有以下結構的XML:

<Categories>
  <Category>
    <Books>
      <Book>
        <BookId>1</BookId>
        <BookQuantity>150</BookQuantity>
      </Book>
      <Book>
        <BookId>2</BookId>
        <BookQuantity>250</BookQuantity>
      </Book>
    </Books>
  </Category>
  <Category>
    <Books>
      <Book>
        <BookId>1</BookId>
        <BookQuantity>150</BookQuantity>
      </Book>
      <Book>
        <BookId>3</BookId>
        <BookQuantity>250</BookQuantity>
      </Book>
    </Books>
  </Category>
</Categories>

我正在嘗試檢索類別中具有數量的每本不同的圖書。 輸出為:

Book 1 300
Book 2 250
Book 3 250

任何執行此操作的最佳方法。 我嘗試使用linq查詢,但無法成功。

您可以使用Linq到Xml 查詢很簡單-只需選擇所有Book元素,然后按BookId元素的值對它們進行分組。 然后將每個組投影到匿名對象或書籍類實例中:

var xdoc = XDocument.Load(path_to_xml);

var books = from b in xdoc.Root.Descendants("Book")
            group b by (int)b.Element("BookId") into g
            select new {
                Id = g.Key,
                Quantity = g.Sum(b => (int)b.Element("BookQuantity"))
            };

結果:

[
  { "Id": 1, "Quantity": 300 },
  { "Id": 2, "Quantity": 250 },
  { "Id": 3, "Quantity": 250 }
]

除了創建匿名對象,您還可以創建Book類的實例:

public class Book
{
   public int Id { get; set; }
   public int Quantity { get; set; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM