2013-02-22 76 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; } 
     } 
    } 
}