tags:

views:

3027

answers:

4

I have an array of items and I would like to sort on one of their properties. I can access the items property using "item.Fields["FieldName"].Value" the property is returned as a string but I can cast it to an int.

I had a look at OrderBy<> but I have no idea of how to use it.

+6  A: 

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.

Jon Skeet
+4  A: 

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));
Quintin Robinson
A: 
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.

Andrew Robinson
+1  A: 

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.)

Guffa