使用Linq分组日期

时间:2009-08-12 18:53:07

标签: linq group-by

我所拥有的是一组具有加入日期的用户,我想使用GoogleChartSharp创建一个图表,显示每月有多少用户加入。

所以我在列表中有这组日期(美国格式):

  

01/01/2009

     

02/01/2009

     

02/12/2009

     

03/02/2009

     

03/12/2009

     

2009年3月22日

Googlechartsharp要求我做这样的事情:

string[] monthYears  = new string[] { "01/2009", "02/2009", "03/2009"};
int[] number= new int[] {1,2,3};

LineChart chart = new LineChart(150, 150);
chart.SetData(data);
chart.SetLegend(monthYears);

string url = chart.GetUrl();

如何利用linq将日期列表添加到谷歌所需的数组中?或者Linq甚至是正确的工具?

2 个答案:

答案 0 :(得分:2)

当然,Linq是一个理想的工具。下面的代码就是一个例子。 (我在日期中指定了月份,因此在设置输入数组时我不必使用DateTime.ParseExact。)

DateTime[] dates =
{
    DateTime.Parse("jan/01/2009")
    ,DateTime.Parse("feb/01/2009")
    ,DateTime.Parse("feb/12/2009")
    ,DateTime.Parse("mar/02/2009")
    ,DateTime.Parse("mar/12/2009")
    ,DateTime.Parse("mar/22/2009")
};

var datesGroupedByMonthYear = from date in dates
                           group date by date.ToString("MM/yyyy") into groupedDates
                           orderby groupedDates.First() ascending
                           select new { MonthYear = groupedDates.Key, Dates = groupedDates };

string[] monthYears = (from d in datesGroupedByMonthYear select d.MonthYear).ToArray();
int[] number = (from d in datesGroupedByMonthYear select d.Dates.Count()).ToArray();

答案 1 :(得分:0)

告诉那些数字是每个月发生的次数。然后你可以做这样的事情:

var numbers = from d in monthYears .Select(x => DateTime.Parse(x))
group d by d.Month into dg
select dg.Count();

这将为您提供每个的IEnumerable计数。如果你需要它作为数组,那么将它转换为数组并不是很难。