2012-02-16 8 views
4

私のXMLファイルから最高の属性「ID」を取得したいと考えています。LINQ to XML少なくとも1つのオブジェクトが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ファイルで請求書コードの1作品であるが、例えば2である場合、請求書は、私がエラーを持っている場合:

少なくとも一つの目的は、IComparableを実装する必要があります。

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

答えて

6

は、それが数値だかstringあれば、それはこのような英数字かどうintf.Attributes("ID")をキャストしてみorderby。あなたは属性の代わりに属性を書きました。あなたはintへのXmlElementをキャストすることはできません。.. intにXMLATTRIBUTESのリストをキャストすることはできません

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

あなたは属性値を取得するには、Valueプロパティを使用する必要があります。また、文字列をintにキャストできません。 – Schiavini

+0

@Schiavini:それはXAttributeではなく、XmlAttributeです。 MSDNは言う、コンパイラはそれを受け入れる、なぜあなたはできませんか? – Mithrandir

+0

あなたは正しいですが、あなたはXAttributeをキャストすることができます。しかし、彼の問題は、XAttribute []を返すf.Attributes()のtypoでした。 – Schiavini

1

あなたが明示的にXAttribute.Valueを明示的にアクセスする必要があります。

1

にタイプミスがありました:

var q = (from f in doc.Element("ListOfInvoices").Elements("Invoice") 
      orderby (int)f.Attribute("ID") descending 
      select f.Attribute("ID")).FirstOrDefault(); 
関連する問題