2010-07-15 7 views
2

Je suis en train de réaliser ce qui suit sans LINQ:GroupBy sans LINQ

J'ai une liste d'objets CenterDetail (avec CenterID et Areaid comme la propriété):

  • 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)

Je veux créer un AreasDictionary comme suit:

  • Areaid = 1: objCenterDetail1, objCenterDetail2, objCenterDetail3
  • Areaid = 2: objCenterDetail4 , objCenterDetail5

Quelle est la meilleure solution pour cela en C# avec .NET 2.0?

+1

... wha? Vous pourriez vouloir considérer un meilleur exemple parce que, à partir de maintenant, cette question n'a aucun sens. –

+2

Vous pouvez utiliser LINQ dans .NET 2.0: http://www.albahari.com/nutshell/linqbridge.aspx – TrueWill

Répondre

4

Vous voulez probablement quelque chose comme ceci:

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

Depuis l'affiche mentionné .NET 2.0, assurez-vous que vous remplacez les instructions var dans l'exemple ci-dessus avec le réel les types. –

+0

@Ben - Opps. Force d'habitude je suppose. – ChaosPandion

+3

'var' fonctionne avec .NET 2.0 comme plate-forme cible - si vous utilisez le compilateur .NET 3.5 ;-) –

1

Ne pas utiliser LINQ signifie généralement en utilisant foreach pour itérer sur votre collection à la place:

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); 
} 

Maintenant, ce ne sera probablement pas compiler dans votre solution depuis vous ne nous avez pas donné suffisamment d'informations sur les types particuliers impliqués, mais cela démontre l'idée générale.