У меня есть массив Person
pocos, заполненный ниже. Я пробую, отображают их в алфавитном порядке Областью, затем LastName в Области. Я использую группировку, и я могу получить Области отсортированный штраф, просто не уверенный, как заказать людям в группе области.
Этот код:
Person[] people = new Person[]
{
new Person() { FirstName = "Tony", LastName = "Montana", Age = 39, HomeProvince = "Ontario" },
new Person() { FirstName = "Bill", LastName = "Smith", Age = 23, HomeProvince = "Ontario" },
new Person() { FirstName = "Jane", LastName = "Doe", Age = 23, HomeProvince = "Alberta" },
new Person() { FirstName = "John", LastName = "Doe", Age = 23, HomeProvince = "Alberta" },
new Person() { FirstName = "Alex", LastName = "DeLarge", Age = 19, HomeProvince = "British Columbia" },
new Person() { FirstName = "Travis", LastName = "Bickle", Age = 42, HomeProvince = "Quebec" },
new Person() { FirstName = "Ferris", LastName = "Beuller", Age = 17, HomeProvince = "Manitoba" },
new Person() { FirstName = "Maggie", LastName = "May", Age = 23, HomeProvince = "Ontario" },
new Person() { FirstName = "Mickey", LastName = "Mouse", Age = 93, HomeProvince = "Alberta" },
new Person() { FirstName = "Frank", LastName = "Darabont", Age = 49, HomeProvince = "Ontario" }
};
var query =
from person in people
group person by person.HomeProvince into g
orderby g.Key
select new { Province = g.Key, People = g };
foreach (var prov in query)
{
Console.WriteLine("{0}: ", prov.Province);
foreach (var person in prov.People)
{
Console.WriteLine(" {0} {1}, {2}", person.FirstName, person.LastName, person.Age);
}
}
Дает мне этот вывод:
Alberta:
Jane Doe, 23
John Doe, 23
Mickey Mouse, 93
British Columbia:
Alex DeLarge, 19
Manitoba:
Ferris Beuller, 17
Ontario:
Tony Montana, 39
Bill Smith, 23
Maggie May, 23
Frank Darabont, 49
Quebec:
Travis Bickle, 42
Как Вы видите, Области перечислены в алфавитном порядке, но как делают я перечисляю людей в области (т.е. для Онтарио я хочу этот порядок: Darabont, Монтана, May, Smith).
Если предположить, что вам нужен алфавитный порядок по фамилии, то измените это:
select new { Province = g.Key, People = g };
на:
select new { Province = g.Key, People = g.OrderBy(p => p.LastName) };
Но обратите внимание, что ваш пример "Дарабонт, Монтана, Мэй, Смит" не совсем в алфавитном порядке. Я предполагаю, что это просто ошибка с вашей стороны, но если это действительно тот порядок, который вы хотите, пожалуйста, объясните правило, которое вы используете для создания такого порядка.
должна быть возможность, после оператора select, сделать orderby(person => person.LastName);