2012-02-16 83 views
4

我想從我的XML文件中獲得最高屬性「ID」。LINQ to XML至少一個對象必須實現IComparable

我的代碼:

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。

回答

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(); 
+0

你不能投XMLATTRIBUTES的列表爲int。你不能施放的XmlElement爲int。而且你不能將一個字符串轉換爲int。 – Schiavini 2012-02-16 13:45:12

+0

@Schiavini:它是一個XAttribute不是XmlAttribute,是的,你可以! MSDN這樣說,編譯器接受它,爲什麼你不能? – Mithrandir 2012-02-16 13:48:22

+0

你是對的,你可以投XAttribute ..但他的問題是在f.Attributes(),它返回XAttribute []錯字。 – Schiavini 2012-02-16 14:16:52

1

你必須明確地訪問XAttribute.Value明確:

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

有一個錯字上排序依據。您編寫了屬性而不是屬性。

您需要使用Value屬性來獲取屬性值:

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