动态LINQ - 按时间间隔分组(日期时间,数字)
问题描述:
我到处搜索,没有找到此问题的解答。我想组在动态LINQ区间(日期时间,数值)(该数据将被动态地装箱,所以我必须使用动态LINQ)动态LINQ - 按时间间隔分组(日期时间,数字)
让我们假设我们有这样的数据:
ID|Date|Price
1|2010-11-01|100
2|2010-11-01|120
3|2010-11-02|50
4|2010-12-01|30
5|2010-12-01|220
6|2011-01-01|400
如何获得这个数据通过像这样
分组 - (由日集团)以下基团
->2010-11-01 = 2 elements
->2010-11-02 = 1 elements
->2010-12-01 = 2 elements
->2011-01-01 = 1 elements
- (集团按月)下列基团
->2010-11 = 3 elements
->2010-12 = 2 elements
->2011-01 = 1 elements
- (按季度集团)以下基团
->2010 q.03 = 5 elements
->2011 q.01 = 1 elements
- (集团由年)以下基团
->2010 = 5 elements
->2011 = 1 element
- (集团由价格(从0开始,每50))以下组
-> <0-50) = 1 elements
-> <50-100) = 1 elements
-> <100-150) = 2 elements
-> <200-250) = 1 elements
-> <400-450) = 1 elements
- (理想情况下,它将按价格分组(从0-50,从50-150,从150-500))以下群组
-> <0-50) = 1 elements
-> <50-150) = 3 elements
-> <150-500) = 2 elements
任何想法?我再次强调 - 它必须是DYNAMIC LINQ或最终是一些复杂的lambda表达式?我应该能够通过字符串中的列名进行“分组”。例如
GroupBy("Date"), GroupBy("Price");
答
这里是如何做到这一点:
例如:
集团按月
public Item[] data =
{
new Item { Date = new DateTime(2011, 11, 6), Price = 103, Name = "a" },
new Item { Date = new DateTime(2011, 11, 16), Price = 110, Name = "b" },
new Item { Date = new DateTime(2011, 12, 4), Price = 200, Name = "c" },
new Item { Date = new DateTime(2011, 12, 4), Price = 230, Name = "d" },
new Item { Date = new DateTime(2012, 1, 15), Price = 117, Name = "e" }
};
var groups = data.AsQueryable().GroupBy("Date.Month", "it").Cast<IGrouping<int, Item>>();
您可以使用 “Date.Day” 和 “Date.Year”而对于类似价格范围的东西,您可以使用将范围内的所有内容映射到相同值的函数,例如使用整数除“(it.Price/50)”