2013-02-22 54 views
0

我確信這個問題有一個簡單的答案,但我似乎無法用短語搜索來獲得正確的結果。計算日期的實例

在我的控制器中,讓我們說我有一個類x的實例列表,它有一個類y的成員變量,它包含一個日期變量。我想要做的是計算每個日期有多少個實例,來構建一個圖。所以我想要的就是一個數組,每個不同的日期有一行,以及日期發生次數。

任何建議,最好的方式來做到這一點,將不勝感激。

+0

請列出類認定中這裏 – Yasser 2013-02-22 13:27:27

回答

4

聽起來像你想要這樣的東西。

var countByDate = items.GroupBy(x => x.Invoice.ReceivedDate) // Or whatever 
         .Select(g => new { Date = g.Key, Count = g.Count() }) 
         .OrderBy(pair => pair.Date); 
         .ToArray(); 

LINQ岩石:)

0

使用擴展方法應該有所幫助。這是我所能做的最好的,不知道你有什麼類型:

ListOfx.Select(x => x.ClassY.Date) 

上一行會給你所有的日期。然後你可以使用GroupBy按照它們的值對它們進行分組。這應該給你一個列表清單。

ListOfx.Select(x => x.ClassY.Date).GroupBy(x => x.Date) 

我認爲這應該工作。我目前無法嘗試代碼。

+0

他需要計算任何日期的頻率,不只是讓他們全部。 – 2013-02-22 13:30:00

3

您可以使用LINQ的Enumerable.GroupBy

var dayGroups = listX.GroupBy(x => x.Y.DateTimeVar.Date) 
        .Select(g => new { Day = g.Key, Count = g.Count() }) 
        .ToArray(); 

現在你擁有你所需要的日期和的發生:

foreach(var dayGroup in dayGroups) 
{ 
    Console.WriteLine("Day: {0} Count: {1}", dayGroup.Day.ToString(), dayGroup.Count); 
} 

假設DateTimeVar是財產,你的一天要組。

0

的代碼可能是笨拙的,但是這應該爲你工作:

using System; 
using System.Collections.Generic; 
using System.Linq; 

namespace App 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      List<X> xs = new List<X> 
      { 
       new X { Y = new Y {D = DateTime.Now}}, 
       new X { Y = new Y {D = DateTime.Now}}, 
       new X { Y = new Y {D = DateTime.Now}}, 
      }; 

      IEnumerable<DateTime> ds = xs.Select(x => x.Y.D).Distinct(); 

      var q = from d in ds 
        select new 
        { 
         D = d, 
         Count = xs.Count(x => x.Y.D.Equals(d)) 
        }; 

      foreach (var i in q) 
      { 
       Console.WriteLine(i); 
      } 
     } 

     class X 
     { 
      public Y Y { get; set; } 
     } 

     class Y 
     { 
      public DateTime D { get; set; } 
     } 
    } 
}