2010-07-15 69 views
2

我試圖實現無LINQ如下:的GroupBy沒有LINQ

我有CenterDetail對象(與CenterID和areaID表示財產)的列表:

  • objCenterDetail1(CenterID = 1,areaID表示= 1)
  • objCenterDetail2(CenterID = 2,areaID表示= 1)
  • objCenterDetail3(CenterID = 3,areaID表示= 1)
  • objCenterDetail4(CenterID = 5,areaID表示= 2)
  • objCenterDetail5(CenterID = 6,areaID表示= 2)

我想創建一個AreasDictionary如下:

  • areaID表示= 1:objCenterDetail1,objCenterDetail2,objCenterDetail3
  • areaID表示= 2:objCenterDetail4 ,objCenterDetail5

在C#中使用.NET 2.0的最佳解決方案是什麼?

+1

... wha?你可能想考慮一個更好的例子,因爲截至目前,這個問題沒有意義。 – 2010-07-15 16:58:47

+2

您可以在.NET 2.0中使用LINQ:http://www.albahari.com/nutshell/linqbridge.aspx – TrueWill 2010-07-15 17:11:10

回答

4

你可能想是這樣的:

Dictionary<int, List<CenterDetail>> map = new Dictionary<int, List<CenterDetail>>(); 
foreach (CenterDetail detail in details) 
{ 
    List<CenterDetail> list; 
    if (!map.TryGetValue(detail.AreaID, out list) 
    { 
     list = new List<CenterDetail>(); 
     map.Add(detail.AreaID, list); 
    } 
    list.Add(detail); 
} 
return map; 
+0

由於海報提到了.NET 2.0,只要確保將上述示例中的var語句替換爲實際類型。 – 2010-07-15 17:05:32

+0

@Ben - Opps。我猜想習慣的力量。 – ChaosPandion 2010-07-15 17:06:35

+3

'var'與.NET 2.0一起作爲目標平臺 - 如果您使用.NET 3.5編譯器;-) – 2010-07-15 17:07:41

1

不使用LINQ通常意味着使用foreach來對您的集合,而不是:

IEnumerable<Center> centers = // Assume this is your collection; 
Dictionary<Area,List<Center>> areasDictionary = new Dictionary<Area,List<Center>>(); 
foreach(Center center in centers) 
{ 
    if (!areasDictionary.ContainsKey(center.Area)) 
     areasDictionary.Add(center.Area, new List<Center>()); 
    areasDictionary[center.Area].Add(center); 
} 

現在,這可能不會在您的解決方案,因爲編譯你沒有給我們足夠的有關特定類型的信息,但它確實證明了總體思路。