Giả sử tôi có một lớp Nhân viên và GetAllEmployees() trả về một danh sách cá thể của nhân viên. Tôi muốn nhân viên nhóm do Sở và giới tính, vì vậy câu trả lời tôi có lànhóm bằng cách sử dụng loại ẩn danh trong 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)
});
Tôi có hai câu hỏi:
Tại sao một loại vô danh cho phép một nhóm nhiều phím bằng?
Tôi không hiểu các loại vô danh đầu tiên, bởi vì từ hiểu biết của tôi, định dạng một loại vô danh nên được như thế này
mới {field1 = x.Department, field2 = x.Gender}
Làm cách nào để loại ẩn danh đầu tiên có thể có mà không có trường? Ý tôi là, đó là cú pháp chính xác để viết một cái gì đó như thế này:
var anonymous = new {field1 = 1,field2 =2}
Nhưng sẽ có biên dịch lỗi nếu tôi viết nó như thế này:
var anonymous = new {1, 2} //compile error !!!
'field1' và' field2' là các lĩnh vực. Khi bạn 'select' bạn đang thực hiện phép chiếu thành một kiểu ẩn danh, khi bạn' groupBy' bạn đang nhận được một cái gì đó khác: 'IEnumerable>' –
Crowcoder
Nếu bạn bỏ qua phần 'field =', tên trường được lấy từ biến/thuộc tính. Xem ['anonymous types'] (http://stackoverflow.com/documentation/c%23/765/anonymous-types/2612/creating-an-anonymous-type#t=201701021356107409379) – Nico