您的GroupBy
聲明是錯誤的。您將得到一個按true
或false
值分組的列表,因爲語句c => c.GroupByProperty == 3
將評估爲布爾值。
相反,你可能需要使用:
var result = Sytlist.SelectMany(x => x.Listerine).GroupBy(c => c.GroupByProperty);
以上將返回IGrouping
對象的集合,而不是一個平面列表。您可以通過類似的方式列舉其訪問的每個組:
foreach (var group in result) {
var key = group.Key; // this is a single value of the `GroupByProperty` type.
foreach (var obj in group) {
// cycle trough all items which are grouped by the current `key` item
}
}
基本上,GroupBy
結果就像一張地圖,其中關鍵是GroupByProperty
的任何一個值,該值是所有匹配的集合項目。在沒有匹配的情況下,您不會收到結果中的組。
如果你只需要通過GroupByProperty
排序的平面列表,那麼整個GroupBy
方法是無關緊要的。你可以簡單地使用:
Sytlist.SelectMany(x => x.Listerine).OrderBy(c => GroupByProperty)
或
Sytlist.SelectMany(x => x.Listerine).OrderBy(c => GroupByProperty, comparer)
其中comparer
是IComparer<T>
實現,並且T
是GroupByProperty
的類型。如果T
本身不是可比類型,或者您需要自定義比較邏輯,則需要比較器。
*我試過像下面的**但是** ...? – 2014-09-01 07:56:50