Скажем, у меня есть класс Employee, а GetAllEmployees() возвращает список экземпляра сотрудника. Я хочу, чтобы сотрудники группы по отделам и гендерным вопросам, поэтому ответ у меня естьгруппа с использованием анонимного типа в Linq
var employeeGroup = Employee.GetAllEmployees()
.GroupBy(x => new { x.Department, x.Gender }) // I don't understand this anonymous type
.OrderBy(g => g.Key.Department)
.ThenBy(g => g.Key.Gender)
.Select(g => new { //I can understand this anonymous type
Dept = g.Key.Department,
Gender = g.Key.Gender,
Employees = g.OrderBy(x => x.Name)
});
У меня есть два вопроса:
Почему анонимный тип позволяет группе несколько ключей от?
Я не понимаю, первый анонимный тип, потому что от моего понимания, формат анонимного типа должно быть, как это
новый {field1 = x.Department, field2 = x.Gender}
Почему первый анонимный тип может иметь без полей? Я имею в виду, это правильный синтаксис, чтобы написать что-то вроде этого:
var anonymous = new {field1 = 1,field2 =2}
Но будет ошибка компиляции, если я пишу это так:
var anonymous = new {1, 2} //compile error !!!
'field1' и' field2' являются полями. Когда вы выбираете 'вы делаете проекцию в анонимный тип, когда вы' groupBy', вы получаете что-то другое: 'IEnumerable>' –
Crowcoder
Если вы опустите часть 'field =', имя поля берется из свойства переменной /. См. ['Анонимные типы'] (http://stackoverflow.com/documentation/c%23/765/anonymous-types/2612/creating-an-anonymous-type#t=201701021356107409379) – Nico