【问题标题】:LINQ to XML At least one object must implement IComparableLINQ to XML 至少一个对象必须实现 IComparable
【发布时间】:2012-02-16 22:17:49
【问题描述】:

我想从我的 XML 文件中获取最高属性“ID”。

我的代码:

    var doc = XElement.Load("invoices.xml");

    var q = (from f in doc.Element("ListOfInvoices").Elements("Invoice")
             orderby f.Attributes("ID") descending
             select f.Attribute("ID")).FirstOrDefault();

当我的 XML 文件中的发票代码之一有效时,但例如 2 发票何时出现错误:

至少一个对象必须实现 IComparable。

【问题讨论】:

    标签: xml linq


    【解决方案1】:

    尝试将f.Attributes("ID") 转换为int(如果它是数字)或string(如果它是这样的字母数字):

    var q = (from f in doc.Element("ListOfInvoices").Elements("Invoice")
                 orderby (int)f.Attribute("ID") descending
                 select f.Attribute("ID")).FirstOrDefault();
    

    【讨论】:

    • 您不能将 XmlAttributes 列表转换为 int。您不能将 XmlElement 转换为 int。而且您不能将字符串转换为 int。
    • @Schiavini:它是 XAttribute 而不是 XmlAttribute,是的,你可以! MSDN这么说,编译器接受,你为什么不接受?
    • 你是对的,你可以转换 XAttribute.. 但是他的问题是 f.Attributes() 的错字,它返回 XAttribute[]。
    • @Schiavini: ...那是怎么回事,你不能 CAST ...?
    【解决方案2】:

    你必须明确地访问XAttribute.Value

    doc.Element("ListOfInvoices")
    .Elements("Invoice")
    .Select(f => f.Attribute("ID").Value)
    .OrderByDecending(a => a).FirstOrDefault();
    

    【讨论】:

      【解决方案3】:

      orderby 上有错字。你写的是属性而不是属性。

      需要使用Value属性来获取属性值:

              var q = (
                  from f in doc.Element("ListOfInvoices").Elements("Invoice")
                  orderby f.Attribute("ID").Value descending
                  select f.Attribute("ID").Value
                  ).FirstOrDefault();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-07
        • 1970-01-01
        • 1970-01-01
        • 2014-04-02
        • 1970-01-01
        • 2019-11-01
        相关资源
        最近更新 更多