2014-10-15 22 views
7

Tôi có một danh sách các sự kiện, mỗi sự kiện đều có thuộc tính datetime. Tôi cần chia danh sách thành các danh sách con theo năm. Bí quyết là, danh sách các sự kiện của tôi được lấy từ một cơ sở dữ liệu và có thể thay đổi, vì vậy tôi không thể chỉ mã hóa bộ năm và sắp xếp các sự kiện vào đúng năm. Có cách nào để tôi có thể chia danh sách sự kiện chính của mình thành các danh sách con để trong mỗi danh sách con, mỗi sự kiện có cùng năm không? Vì vậy, tôi sẽ kết thúc với một danh sách phụ của tất cả các sự kiện năm 2010, một danh sách phụ của tất cả các sự kiện 2011, v.v.C# Chia danh sách thành các danh sách con dựa trên giá trị của một tài sản nhất định?

danh sách của tôi được tạo ra như thế này:

foreach (var ev in eventResults) 
    { 
     eventsList.Add(new Event() 
     { 
      Name = ev.Title, 
      Month = CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName(ev.StartDate.Month), 
      Day = ev.StartDate.Day, 
      Year = ev.StartDate.Year 
     }); 
    } 
+2

groupby là những gì bạn đang tìm kiếm: http://stackoverflow.com/questions/7325278/group-by-in -linq –

Trả lời

23

Bạn cần phải thực hiện một năm grouping by như thế:

eventsList.GroupBy(x => x.Year) 

Vì vậy, cuối năm bạn sẽ có thể lặp thông qua kết quả của đoạn mã trên:

foreach (var eventsInYear in eventsList.GroupBy(x => x.Year)) 
{ 
    //eventsInYear.Key - year 
    //eventsInYear - collection of events in that year 
} 
4

Sử dụng nhómBởi:

var eventsByYear = eventsList.GroupBy(a => a.Year); 

Sau đó bạn có thể lặp qua tập hợp để xử lý mỗi năm:

foreach (var yearEvents in eventsByYear) 
{ 
    // yearEvents contains all the events for one particular year 
    Console.WriteLine("Events for year: " + yearEvents.Key); 
    foreach (var e in yearEvents) 
    { 
     Console.WriteLine(e); 
    } 
} 
+1

sự kiện btw là một từ khóa và bạn không thể sử dụng nó ngay lập tức, phải là @event – Vladimirs

+0

@Vladimirs: Tốt bắt. –

Các vấn đề liên quan