Sort array of items using OrderBy<>

Use the Sort method to sort an array:

Array.Sort(theArray, (a, b) => String.Compare(a.Fields["FieldName"].Value, b.Fields["FieldName"].Value));

If you are not using C# 3, you use a delegate instead of a lambda expression:

Array.Sort(theArray, delegate(Item a, Item b) { return String.Compare(a.Fields["FieldName"].Value, b.Fields["FieldName"].Value); } );

(This also works with framework 2, which the OrderBy extension doesn't.)


To be clear, OrderBy won't sort the array in place - it will return a new sequence which is a sorted copy of the array. If that's okay, then you want something like:

var sorted = array.OrderBy(item => item.Fields["FieldName"].Value);

On the other hand, I don't understand your comment that the property is returned as a string but that you can cast it to an int - you can't cast strings to ints, you have to parse them. If that's what you meant, you probably want:

var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value));

If you want that as an array, you can call ToArray() afterwards:

var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value))
                  .ToArray();

Alternatively you could use Array.Sort if you want to sort in-place, but that will be somewhat messier.


var sortedArray = items.OrderBy(i => i.property).ToArray();

If you don't want an array, you can leave that off in which case you will have an IEnumerable<> of type item.


If you can use orderby it should be easy, try the following. I threw in the int.Parse although depending on how you actually want to sort this might not be required.

var sorted = array.OrderBy(item => int.Parse(item.Fields["FieldName"].Value));

Tags:

C#

Arrays

Sorting