LINQ to XML至少有一个对象必须实现IComparable

时间:2012-02-16 13:32:42

标签: xml linq

我想从我的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。

3 个答案:

答案 0 :(得分:6)

尝试将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();

答案 1 :(得分:1)

您必须明确地显式访问XAttribute.Value

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

答案 2 :(得分:1)

订单上有拼写错误。您编写了属性而不是属性。

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

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