Ответ 1
Точно так же вы можете отсортировать любые другие перечисляемые файлы:
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 <T> который при перечислении возвращает элементы исходного IEnumerable <T> в отсортированном порядке. Он не сортирует IEnumerable <T> на месте.
IEnumerable <T> доступен только для чтения, т.е. вы можете извлекать из него только элементы, но не можете изменять его напрямую. Если вы хотите отсортировать коллекцию строк на месте, вам необходимо отсортировать исходную коллекцию, которая реализует IEnumerable <string> , или включить IEnumerable <string> сначала в сортируемую коллекцию:
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();