Лямбда-выражения - оператор выбора - PullRequest
2 голосов
/ 27 марта 2011

Я хотел бы знать, как написать запрос Linq (используя лямбда-выражение в стандартной точечной нотации).У меня есть массив некоторых имен, и я хотел бы обновить новый массив имен, основанный на одном утверждении.Это: Упорядочить массив имен и вернуть новый список из имени, которое начинается с некоторой конкретной буквы (скажем, буквы М).

Это мой текущий массив:

string[] arrNames = { "Mike", "Zach", "Ella", "Allan", "Jo", "Roger", "Tito" };

Я хотел бы вернуть такие имена: Майк, Роджер, Тито, Зак - эти 4;Другие 3 имени (Аллан, Элла и Джо - это имена, начинающиеся с буквы в алфавитном порядке ниже буквы «M». Это не то же самое, что использование оператора «StartsWith». Это выбирает только имена, начинающиеся с определенногобуква. Я хотел бы получить все имена в алфавитном порядке, начиная с этой буквы и далее (чтобы имена начинались с М до Z) * ​​1007 *.

Поэтому список повторной настройки с именами начинается с буквы«М» или выше, в алфавитном порядке.

Митя

Ответы [ 3 ]

5 голосов
/ 27 марта 2011
var result = arrNames.Where(i => String.Compare("M", i) <= 0)
                     .OrderBy(i => i);
4 голосов
/ 27 марта 2011

Похоже, вам нужно это:

arrNames.Where(n => string.Compare(n, "M") >= 0)

, который возвращает все имена в алфавитном порядке больше (или равно) "M", в порядке по умолчанию ({ Mike, Zach, Roger, Tito } в вашем случае).

Если вы хотите дополнительно отсортировать, используйте

arrNames.Where(n => string.Compare(n, "M") >= 0).OrderBy(n => n)

Это дает { Mike, Roger, Tito, Zach }.

1 голос
/ 27 марта 2011
arrNames.Where(s => string.Compare(s,"M",StringComparison.InvariantCultureIgnoreCase) >= 0).OrderBy(s => s);

, если вы хотите сравнение без учета регистра.Или используйте StringComparison.InvariantCulture с учетом регистра.Обычно хорошей идеей является указание культуры для сравнения строк (например, вы можете использовать текущую культуру или инвариантную культуру).

Если вся ваша задача сортировки состоит только в том, чтобы получить элементы за пределами "M", тогда вы можете опустить OrderBy.

...