2011-08-29 78 views
2

我具有由特定的屬性組合的對象的列表。我需要根據其他屬性對此列表進行排序,但始終需要保留分組。因此,例如,如果列表是一樣的東西:C#對象按組分類,使用LINQ

{ id=1, partNumber = 100 } 
{ id=2, partNumber = 500 } 
{ id=2, partNumber = 300 } 
{ id=2, partNumber = 600 } 
{ id=3, partNumber = 550 } 
{ id=3, partNumber = 990 } 
{ id=4, partNumber = 200 } 
{ id=5, partNumber = 300 } 

然後輸入部件編號升序排序後的結果將是:

{ id=1, partNumber = 100 } 
{ id=4, partNumber = 200 } 
{ id=5, partNumber = 300 } 
{ id=2, partNumber = 400 } 
{ id=2, partNumber = 500 } 
{ id=2, partNumber = 600 } 
{ id=3, partNumber = 550 } 
{ id=3, partNumber = 990 } 

它按最小PARTNUMBER各組(或最大,如果排序是降序),但必須保持按ID分組。我曾嘗試.OrderBy()和.GroupBy()的各種組合,但我似乎無法得到我所需要的。

+0

在什麼時候,你分組的結果?你是在數據庫級別進行分組,比如通過存儲過程,還是通過LINQ進行分組? –

回答

4
var orderedList = 
    list.GroupBy(i => i.id) 
     .OrderBy(g => g.Min(i => i.partNumber)) 
     // and if you want to flatten the groupings back out 
     .SelectMany(g => g); 
+0

,還可能需要向的SelectMany事後取消組合的SelectMany – Jimmy

+1

似乎是我失蹤了。非常感謝。 – drowned

+0

添加* .OrderBy(I => i.partNumber)*第一,這將得到期望的輸出 – Aducci

0

您之前/之後的測試樣本不匹配,但這應該可以解決您的問題。

var query = from a in list 
      orderby a.partNumber 
      group a by a.id into ag 
      orderby ag.Min(x => x.partNumber) 
      from a in ag 
      select a; 
+0

我的前測試樣品是一個任意列表。我很確定後面的樣本匹配,按ID分組,按部件號排序。你什麼意思? – drowned

+0

@drowned - 在你的第一套,你有** ID = 3,部分號碼= 900 **,是不是在你的有序集合,但你有** ID = 3,部分號碼= 550 ** – Aducci

+0

啊,一個錯字,好。我以爲你在說這種錯誤。知道了謝謝。 – drowned