2011-09-23 328 views
1

我到處搜索,沒有找到此問題的解答。我想組在動態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"); 

回答

0

這裏是如何做到這一點:

例如:

集團按月

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)」