我試圖使用Linq表達式來構造一個查詢,並且試圖按多列進行分組。說我有一個基本的集合:如何按多個通用linq表達式進行分組
IEnumerable<Row> collection = new Row[]
{
new Row() { Col1 = "a", Col2="x" },
new Row() { Col1 = "a", Col2="x" },
new Row() { Col1 = "a", Col2="y" },
};
我知道你可以組這些使用lambda表達式:
foreach (var grp in collection.GroupBy(item => new { item.Col1, item.Col2 }))
{
Debug.Write("Grouping by " + grp.Key.Col1 + " and " + grp.Key.Col2 + ": ");
Debug.WriteLine(grp.Count() + " rows");
}
這組正確,你可以看到:
Grouping by a and x: 2 rows
Grouping by a and y: 1 rows
但現在,說我收到一組選擇器進行分組,這是作爲我的方法中的一個參數傳遞給我的,並且實體類型是通用的:
void doLinq<T>(params Expression<Func<T,object>>[] selectors)
{
// linq stuff
}
誰真實調用方法將調用這樣的:
doLinq<Row>(entity=>entity.Col1, entity=>entity.Col2);
我將如何通過組表達構建?
foreach (var grp in collection.GroupBy(
item => new {
// selectors??
}))
{
// grp.Key. ??
}
編輯
我上面希望澄清爲什麼我需要設定選擇的更新。
編輯#2
作出的實體doLinq泛型類型。
好像你應該能夠編寫一個將多個'Expression>'結合成一個'Expression < Func >'返回一個元組或者數組或者其他值。它看起來像你正在使用LINQ到SQL,但我不知道有關到SQL的翻譯知道你是否可以用可翻譯的方式做到這一點,但是。 –
phoog
2012-04-13 20:15:37
@phoog它看起來像你應該能夠將它們組合成一個單一的表達式 - 我仍然不知道該怎麼做。我最終結合了表達式的結果,而不是每行。 – McGarnagle 2012-04-21 20:28:21
您應該將解決方案作爲新答案發布,而不是編輯問題。 – svick 2012-04-21 20:30:03