簡體   English   中英

幫助 LINQ 到 Xml

[英]Help with LINQ to Xml

我之前發布了另一篇關於如何使用 XSLT 轉換 XmlDocument 的帖子,但也許可以使用 LINQ 來代替。

我有一個看起來像這樣的 XmlDocument:

<DocumentElement>
  <Customer>
    <CustomerId>2315</CustomerId>
    <VersionNumber>1</VersionNumber>
    <GUID>2E05DE20-02A0-425D-944D-65E5E744FF8A</GUID>
  </Customer>
  <Customer>
    <CustomerId>2316</CustomerId>
    <VersionNumber>2</VersionNumber>
    <GUID>2E05DE20-02A0-425D-944D-65E5E744FF8A</GUID>
  </Customer>
  <Customer>
    <CustomerId>2317</CustomerId>
    <VersionNumber>1</VersionNumber>
    <GUID>9995DE20-02A0-425D-944D-65E5E744FF8A</GUID>
  </Customer>
</DocumentElement>

我可以使用 LINQ 為每個唯一的 GUID 提取一個客戶元素並獲取具有最高版本號的客戶嗎?

即新的/轉換后的文檔將如下所示:

<DocumentElement>
  <Customer>
    <CustomerId>2316</CustomerId>
    <VersionNumber>2</VersionNumber>
    <GUID>2E05DE20-02A0-425D-944D-65E5E744FF8A</GUID>
  </Customer>
  <Customer>
    <CustomerId>2317</CustomerId>
    <VersionNumber>1</VersionNumber>
    <GUID>9995DE20-02A0-425D-944D-65E5E744FF8A</GUID>
  </Customer>
</DocumentElement>

提前致謝。

更新:

所以我應該這樣做(如果我理解正確的話?):

    XDocument xdoc = new XDocument();
    using (StringWriter sw = new StringWriter())
    {
        // Converts the datatable to XML                             
        dt.WriteXml(sw);
        xdoc = XDocument.Parse(sw.ToString());
    }

        var query = xdoc.Root
            .Elements("Customer")
            .GroupBy(x => x.Element("GUID").Value)
            .Select(g => g.OrderByNumberDescending(x =>(int)x.Element("VersionNumber"))
                          .First());

我仍然在 GroupBy 上收到錯誤,或者我在這里做錯了什么?

絕對地:

var query = parent
    .Elements("Customer")
    .GroupBy(x => x.Element("GUID").Value)
    .Select(g => g.OrderByNumberDescending(x => (int) x.Element("VersionNumber"))
                  .First());

或使用MoreLINQ

var query = parent
     .Elements("Customer")
     .GroupBy(x => x.Element("GUID").Value)
     .Select(g => g.MaxBy(x => (int) x.Element("VersionNumber")));

暫無
暫無

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

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