帮助从LINQ到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")));

相关内容

  • 没有找到相关文章

最新更新