2013-07-15 36 views
5

Tôi có một tập hợp các mục KeyValuePair có DateTime là khóa và một chuỗi làm giá trị. Về cơ bản dữ liệu của tôi trông giống như:C# LINQ đếm các phần tử với DISTINCT

12/07/2013 - 10220 
12/07/2013 - 10220 
12/07/2013 - 12220 
12/07/2013 - 11240 
12/07/2013 - 15220 
13/07/2013 - 23220 
13/07/2013 - 35620 
14/07/2013 - 15620 
14/07/2013 - 15620 

Tôi muốn có một danh sách có bao nhiêu mặt hàng (riêng biệt) Tôi đã cho mỗi ngày. Vì vậy, các truy vấn sẽ cho kết quả trong một:

12/07/2013 - 4 
13/07/2013 - 2 
14/07/2013 - 1 

Trả lời

16

sử dụng group by

var dateGrouped = dates.GroupBy(x => x.Key) 
         .Select(x => new { Date = x.Key, Values = x.Distinct().Count() }); 
2

Dưới đây là giải pháp với ví dụ hoàn chỉnh

 var list = new[] 
     { 
      new {Date = new DateTime(2013,07,12), value = 10220}, 
      new {Date = new DateTime(2013,07,12), value = 10220}, 
      new {Date = new DateTime(2013,07,12), value = 12220}, 
      new {Date = new DateTime(2013,07,12), value = 11240}, 
      new {Date = new DateTime(2013,07,12), value = 15220}, 
      new {Date = new DateTime(2013,07,13), value = 23220}, 
      new {Date = new DateTime(2013,07,13), value = 35620}, 
      new {Date = new DateTime(2013,07,14), value = 15620}, 
      new {Date = new DateTime(2013,07,14), value = 15620}, 
     }; 


     var res = from l in list group l by new { l.Date } into g select new { g.Key.Date, value = g.Distinct().Count() }; 

     foreach (var item in res) 
     { 
      Console.WriteLine(item.Date + " " + item.value); 
     } 
Các vấn đề liên quan