EDIT: Được rồi, bây giờ chúng tôi đã có một bộ hơi rõ ràng hơn về các yêu cầu (mặc dù vẫn còn xa mới bằng văn bản rõ ràng) cách tiếp cận đơn giản nhất có lẽ sẽ là:
var maxes = list.GroupBy(x => x.id2,
(key, xs) => xs.OrderByDescending(x => x.id1)
.First()
.value);
Thật không may LINQ không cung cấp một cách đơn giản nhận được "phần tử có giá trị tối đa" (thay vì chính giá trị tối đa). Tôi có một phương pháp trong MoreLINQ mà thực hiện điều này, mặc dù gọi là MaxBy
:
var maxes = list.GroupBy(x => x.id2,
(key, xs) => xs.MaxBy(x => x.id2).value);
Original câu trả lời (Grouping bởi id2, lấy giá trị lớn nhất)
tôi trả lời giả bạn thực sự có nghĩa là nhóm theo id2
thay vì id1
và bạn thực sự muốn kết quả của 12 và 87 thay vì 6 và 87. Trong trường hợp đó, bạn muốn:
var maxes = list.GroupBy(x => x.id2, (id, xs) => xs.Max(x => x.value));
Hoặc (có thể đơn giản hơn để hiểu):
var maxes = list.GroupBy(x => x.id2)
.Select(xs => xs.Max(x => x.value));
Hoặc:
var maxes = list.GroupBy(x => x.id2, x => x.value)
.Select(values => values.Max());
Hoặc:
var maxes = list.GroupBy(x => x.id2, // Key selector
x => x.value, // Element selector
(key, values) => values.Max()); // Result selector
Hoặc thậm chí:
var maxes = list.GroupBy(x => x.id2)
.Select(xs => xs.Select(x => x.value).Max());
Như bạn thấy, GroupBy
có nhiều quá tải :)
Hoặc bạn có thể sử dụng một biểu thức truy vấn:
var maxes = from x in list
group x.value by x.id2 into values
select values.Max();
Bạn không nên giới hạn mình vào một trong hai biểu thức truy vấn hoặc các phương pháp khuyến nông phiên bản - điều quan trọng là phải hiểu cả hai, vì vậy bạn có thể sử dụng bất cứ điều gì thích hợp nhất.
Bạn chưa bày tỏ câu hỏi của bạn rõ ràng ở tất cả . * Tại sao * bạn mong đợi kết quả là 6 và 87? Tại sao bạn nhóm theo id1 khi mỗi hàng có id1 khác nhau? Nếu bạn được nhóm theo id2 mà sẽ có ý nghĩa hơn, nhưng sau đó kết quả nên là 12 và 87, không phải 6 và 87. Hãy dành chút thời gian để làm cho câu hỏi của bạn rõ ràng. –
Nhưng '6 <12' và' 87> 8'; vui lòng giải thích. –
Tôi nghĩ anh ấy muốn nhóm theo id2 và chọn Giá trị tối đa từ mỗi nhóm –