Так же, как вы сортируете любое другое перечисляемое:
var result = myEnumerable.OrderBy(s => s);
или
var result = from s in myEnumerable
orderby s
select s;
или (без учета регистра)
var result = myEnumerable.OrderBy(s => s,
StringComparer.CurrentCultureIgnoreCase);
Обратите внимание, что, как обычно в LINQ, это создает новый IEnumerable , который при перечислении возвращает элементы исходного IEnumerable в отсортированном порядке. Он не сортирует IEnumerable на месте.
IEnumerable предназначен только для чтения, то есть вы можете только извлечь из него элементы, но не можете изменить его напрямую. Если вы хотите отсортировать коллекцию строк на месте, вам нужно отсортировать исходную коллекцию, которая реализует IEnumerable , или сначала превратить IEnumerable в сортируемую коллекцию:
List<string> myList = myEnumerable.ToList();
myList.Sort();
На основании вашего комментария:
_components = (from c in xml.Descendants("component")
let value = (string)c
orderby value
select value
)
.Distinct()
.ToList();
или
_components = xml.Descendants("component")
.Select(c => (string)c)
.Distinct()
.OrderBy(v => v)
.ToList();
или (если вы хотите позже добавить больше элементов в список и сохранить его отсортированным)
_components = xml.Descendants("component")
.Select(c => (string)c)
.Distinct()
.ToList();
_components.Add("foo");
_components.Sort();