phép nói rằng tôi có cụt Person
lớp này:C#: Làm thế nào để sử dụng phương pháp Enumerable.Aggregate
class Person
{
public int Age { get; set; }
public string Country { get; set; }
public int SOReputation { get; set; }
public TimeSpan TimeSpentOnSO { get; set; }
...
}
tôi có thể sau đó nhóm trên Age
và Country
như thế này:
var groups = aListOfPeople.GroupBy(x => new { x.Country, x.Age });
Sau đó, tôi có thể xuất tất cả các nhóm có tổng số danh tiếng như sau:
foreach(var g in groups)
Console.WriteLine("{0}, {1}:{2}",
g.Key.Country,
g.Key.Age,
g.Sum(x => x.SOReputation));
Câu hỏi của tôi là, làm thế nào tôi có thể nhận được một khoản tiền của tài sản TimeSpentOnSO
? Phương pháp Sum
sẽ không hoạt động trong trường hợp này vì nó chỉ dành cho int
và như vậy. Tôi nghĩ rằng tôi có thể sử dụng phương pháp Aggregate
, nhưng nghiêm túc không thể tìm ra cách sử dụng nó ... Tôi đang cố gắng tất cả các loại tài sản và các loại trong các kết hợp khác nhau nhưng trình biên dịch sẽ không nhận ra nó.
foreach(var g in groups)
Console.WriteLine("{0}, {1}:{2}",
g.Key.Country,
g.Key.Age,
g.Aggregate( what goes here?? ));
Tôi hoàn toàn có hiểu sai phương pháp tổng hợp không? Hay chuyện gì đang xảy ra? Có một số phương pháp khác tôi nên sử dụng thay thế? Hoặc tôi có phải viết biến thể Sum
của riêng mình cho TimeSpan
s không?
Và để thêm vào mớ hỗn độn, điều gì xảy ra nếu Người là một lớp ẩn danh, kết quả từ ví dụ: Select
hoặc tuyên bố GroupJoin
?
Chỉ cần tìm ra rằng tôi có thể làm cho công việc Aggregate
phương pháp nếu tôi đã làm một Select
trên TimeSpan
sở hữu đầu tiên ... nhưng tôi thấy rằng loại gây phiền nhiễu ... Vẫn không cảm thấy tôi hiểu phương pháp này ở tất cả ...
foreach(var g in groups)
Console.WriteLine("{0}, {1}:{2}",
g.Key.Country,
g.Key.Age,
g.Select(x => x.TimeSpentOnSO)
g.Aggregate((sum, x) => sum + y));
Tôi chỉ muốn chỉ ra rằng Tổng hợp (giảm) là một trong những điều thú vị nhất trên thế giới hiện nay mà tôi đã gặp phải tình huống mà tôi muốn sử dụng nó. :) –