按月和按日期分组项目

时间:2014-02-09 17:39:52

标签: linq c#-4.0 windows-phone-8

我想逐月对数据条目进行分组(例如:2014年1月,Febraruary 2014)。这没问题,但现在我每天有一个以上的条目,所以我必须按日期对数据进行分组。

以下是一个例子:

var lst = [{02/01/2014, 5}, {02/01/2014, 6}, {02/01/2014, 3}, {01/01/2014, 5}, {01/02/2014, 5}]

==>按月分组(2月,1月)

[{02/01/2014, 5}, {02/01/2014, 6}, {02/01/2014, 3}], [{01/01/2014, 5}, {01/02/2014, 5}]

==>按日分组(1月1日,1月1日,1月2日)

[{02/01 / 2014,4.67}],[{01/01 / 2014,5}],[{01/02 / 2014,5}]

以下是我的KeyedList的代码:

public class KeyedList<TKey, TItem> : List<TItem>
{
    public TKey Key { protected set; get; }
    public IEnumerable<TItem> Items { protected set; get; }

    public KeyedList(TKey key, IEnumerable<TItem> items) : base(items)
    {
        Key = key;
        Items = items;
    }

    public KeyedList(IGrouping<TKey, TItem> grouping)
        : base(grouping)
    {
        Key = grouping.Key;
        Items = grouping;
    }
}

对我来说,可以按月对值进行分组:

var groupedItems = from item in MyItems
                   orderby Convert.ToDateTime(item.Date) descending,
                   group item by Convert.ToDateTime(item.Date).ToString("MMMM) into items
                   select new KeyedList<string, MyDataType>(items);

但是我怎样才能进行第二次分组来分组日子。感谢。

1 个答案:

答案 0 :(得分:0)

我不确定你想如何组织你的结果(这个KeyedList开始扮演一个角色)但这应该基本上做你想要的:

from item in MyItems
group item by new { item.Date.Year, item.Date.Month } into monthGroup
select new { monthGroup.Key, 
             Days = from d in monthGroups
                    group d by d.Date.Day into dayGroup
                    select new { d.Key, dayGroup }
           }

我使用item.Date,假设您将能够首先构建一个具有已解析日期的对象列表,而不是在查询本身中效率低得多的多次解析。

顺便提一下,请注意您的KeyedList几乎与IGrouping相同。也许你可以没有。