我想逐月对数据条目进行分组(例如: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);
但是我怎样才能进行第二次分组来分组日子。感谢。
答案 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
相同。也许你可以没有。