Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to sort XML in LINQ C# by an attribute value? Also MVC

(Using the latest MVC 2 RC 2) I'm trying to sort some XML in LINQ (C#) by an element's attribute's value...

var sites = from s in xDoc.Element("sites").Elements("site")
orderby s.Attribute("name")
select s;

But when I pass this to my View I get the exception:

Exception Details: System.ArgumentException: At least one object must implement IComparable.
Source Error: 
Line 37:                </th>
Line 38:            </tr>
Line 39:            <% foreach (var item in Model)
Line 40:               { %>
Line 41:            <tr>

Can someone tell me how to sort XML using LINQ and have it render properly?

like image 369
Matt W Avatar asked Feb 05 '10 16:02

Matt W


1 Answers

EDIT: Okay, I think you just want:

var sites = from s in xDoc.Element("sites").Elements("site")
            orderby (string) s.Attribute("name")
            select s;

Which could also be written as:

var sites = xDoc.Element("sites")
                .Elements("site")
                .OrderBy(s => (string) s.Attribute("name"));
like image 75
Jon Skeet Avatar answered Nov 15 '22 01:11

Jon Skeet