Powiedzmy, że mam klasę pracowników, a GetAllEmployees() zwraca listę instancji pracownika. Chcę pracowników Grupy przez Departament i płci, więc odpowiedź mam togrupa przy użyciu anonimowego typu w 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)
});
Mam dwa pytania:
Dlaczego typ anonimowy pozwala grupę wielu kluczy przez?
Nie rozumiem pierwszy typ anonimowy, ponieważ z mojego zrozumienia, format typ anonimowy powinien być tak
nowy {pole1 = x.Department, pole2 = x.Gender}
Jak to możliwe, że pierwszy anonimowy typ może zawierać pola? To znaczy, że to poprawna składnia, aby napisać coś takiego:
var anonymous = new {field1 = 1,field2 =2}
Ale nie będzie skompilować błąd, jeśli napiszę to tak:
var anonymous = new {1, 2} //compile error !!!
'field1' i' field2' są pola. Kiedy 'wybierasz' robisz projekcję w typ anonimowy, gdy' groupBy' dostajesz coś innego: 'IEnumerable>' –
Crowcoder
Jeśli pominiesz część 'field =', pole fieldname jest pobierane ze zmiennej/właściwości. Zobacz ["typy anonimowe"] (http://stackoverflow.com/documentation/c%23/765/anonymous-types/2612/creating-an-anonymous-type#t=201701021356107409379) – Nico