2009-02-12 9 views
0

J'ai une liste d'objets concrets. Certains nécessitent d'être analysés pour prendre une décision à laquelle sera conservé (lorsque le groupe contient plus de 1 occurrence).Regrouper des données avec Linq ou non?

Voici un exemple simplifié:

List<MyObject> arrayObject = new List<MyObject>(); 
arrayObject.Add(new MyObject { Id = 1, Name = "Test1", Category = "Cat1"}); 
arrayObject.Add(new MyObject { Id = 2, Name = "Test2", Category = "Cat2" }); 
arrayObject.Add(new MyObject { Id = 2, Name = "Test2", Category = "Cat3" }); 

Cela doit être à la fin de l'analyse que:

arrayObject.Add(new MyObject { Id = 1, Name = "Test1", Category = "Cat1"}); 
arrayObject.Add(new MyObject { Id = 2, Name = "Test2", Category = "Cat3" }); 

Comme vous le voyez ID2 avec Cat2 est parti parce que la la logique métier l'a emporté. Donc, ce qui devrait être fait est de pouvoir obtenir ceux qui ont plus d'une catégorie et d'appliquer une logique à ce sujet.

Voici ce que j'ai jusqu'à présent:

 List<MyObject> arrayObject = new List<MyObject>(); 
     arrayObject.Add(new MyObject { Id = 1, Name = "Test1", Category = "Cat1"}); 
     arrayObject.Add(new MyObject { Id = 2, Name = "Test2", Category = "Cat2" }); 
     arrayObject.Add(new MyObject { Id = 2, Name = "Test2", Category = "Cat3" }); 


     var filtered = from arrayObject1 in arrayObject 
         group arrayObject by new { arrayObject1.Id, arrayObject1.Name } 
         into g 
         select new { KKey = g.Key, Obj = g }; 


     foreach(var c in filtered) 
     { 
      Console.WriteLine(c.KKey + ":" + c.Obj.Count()); 
      foreach (var cc in c.Obj) 
      { 
       //Put some Business Logic here to get only 1... but to simplify will just print 
       Console.WriteLine("--->" + cc); 
      } 
     } 

Le problème est 1) cc est pas de type MyObject, deuxièmement, je dois obtenir toutes les propriétés du groupe par les nouvelles .. Je pourrais avoir peu d'objets qui seront différents.

Est-ce possible avec Linq? Parce que je peux le faire sans utiliser Linq ... mais j'essaie d'appliquer de nouvelles choses de ce framework (3.5) autant que possible. Merci

Répondre

4

Le problème est dans la ligne qui dit:

group arrayObject by 

Il faut dire:

group arrayObject1 by 
+0

Oh my! Ça ne marche pas. Avez-vous une idée qui ne me permettra pas d'ajouter tout le champ dans le tableau arrayObject1 par new {arrayObject1.Id, arrayObject1.Name}. En fait, l'objet réel a plusieurs propriétés. N'y a-t-il pas moyen de grouper par "tous les champs sauf x"? –

Questions connexes