LINQ - не может выяснить, что сортировка сгруппировала данные

У меня есть массив 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).

1
задан eponymous23 25 June 2010 в 20:29
поделиться

2 ответа

Если предположить, что вам нужен алфавитный порядок по фамилии, то измените это:

select new { Province = g.Key, People = g };

на:

select new { Province = g.Key, People = g.OrderBy(p => p.LastName) };

Но обратите внимание, что ваш пример "Дарабонт, Монтана, Мэй, Смит" не совсем в алфавитном порядке. Я предполагаю, что это просто ошибка с вашей стороны, но если это действительно тот порядок, который вы хотите, пожалуйста, объясните правило, которое вы используете для создания такого порядка.

2
ответ дан 2 September 2019 в 23:29
поделиться

должна быть возможность, после оператора select, сделать orderby(person => person.LastName);

0
ответ дан 2 September 2019 в 23:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: