2011-03-20 84 views
3

我正在使用VS2010代碼示例中的Dyanmic LINQ,因爲我試圖創建一個LINQ groupby表達式。 我想讓用戶有可能在運行時選擇屬性來分組/ on以及分組的週期(年,季,月)。因此,我決定採用Dynamic LINQ。動態LINQ GroupBy問題

這裏是我的數據樣本:

ID |收入| OrDate |
1 | 900000 | 1-1-2000 |
2 | 180000 | 1-9-2000 |
3 | 300000 | 3-2-2002 |
4 | 100000 | 2-7-2003 |

和我建立了表達式如下:

dataSource.GroupBy("new (OrDate.Year as Year, OrDate as Month)", "Income").Select("new (Key.Year, Key.Month, Sum(Value) as Income)"); 

這種運作良好,只有我自己知道名單的確切類型;例如:List<Product>List<Order>。我的問題是編譯時的dataSource類型是List<object>。正因爲如此,每當我充滿訂單或產品列表中,我得到一個異常:

No generic method 'GroupBy' on type 'System.Linq.Queryable' is compatible with the supplied type arguments and arguments. No type arguments should be provided if the method is non-generic. 

誰能告訴我這可怎麼避免,仍保持源列表作爲List<object>

+0

這是否即使編譯如果'dataSource'是'名單'? Dynamic LINQ中的GroupBy方法是'IQueryable'的擴展方法,而不是'IEnumerable'的擴展方法。 – Slauma 2011-03-21 19:26:44

+0

我的不好,你說得對,它是一個IQueryable。 – 2011-03-21 20:57:22

+0

它是非泛型'IQueryable'還是'IQueryable '?我試圖重現這個錯誤,但是我只收到類似「OrDate不是類型對象的成員」的錯誤,但不是你的錯誤消息。你能澄清一下'dataSource'究竟是什麼以及它來自哪裏? – Slauma 2011-03-21 21:55:25

回答

0

試試這個 -

For group by in LinQ 

var x = t.GroupBy(gp => gp.Name).OrderBy(group => group.Key).Select(group => Tuple.Create(group.Key, group.Count())); 

請找

https://dotnetfiddle.net/WPqzhJ