2012-02-16 66 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(); 
相关问题