How can I sort an IEnumerable<string>
alphabetically. Is this possible?
Edit: How would I write an in-place solution?
The same way you'd sort any other enumerable:
var result = myEnumerable.OrderBy(s => s);
or
var result = from s in myEnumerable
orderby s
select s;
or (ignoring case)
var result = myEnumerable.OrderBy(s => s,
StringComparer.CurrentCultureIgnoreCase);
Note that, as is usual with LINQ, this creates a new IEnumerable<T> which, when enumerated, returns the elements of the original IEnumerable<T> in sorted order. It does not sort the IEnumerable<T> in-place.
An IEnumerable<T> is read-only, that is, you can only retrieve the elements from it, but cannot modify it directly. If you want to sort a collection of strings in-place, you need to sort the original collection which implements IEnumerable<string>, or turn an IEnumerable<string> into a sortable collection first:
List<string> myList = myEnumerable.ToList();
myList.Sort();
Based on your comment:
_components = (from c in xml.Descendants("component")
let value = (string)c
orderby value
select value
)
.Distinct()
.ToList();
or
_components = xml.Descendants("component")
.Select(c => (string)c)
.Distinct()
.OrderBy(v => v)
.ToList();
or (if you want to later add more items to the list and keep it sorted)
_components = xml.Descendants("component")
.Select(c => (string)c)
.Distinct()
.ToList();
_components.Add("foo");
_components.Sort();