2010-10-05 6 views
2

je la liste suivante:Aide dans la requête LINQ avec le groupe par

1: true; 
2: false;  
2: true; 
3: false; 
3: false; 
3: false; 

Je veux une requête LINQ pour obtenir une collection comme suit:

clé, opération OU entre les éléments groupés, pour exemple:

2: false | true = true 

Le résultat doit être:

1: true 
2: true 
3: false 

Merci à l'avance

Répondre

3
// my sample data 
var list = new[] { 
    new {key = 1, value = true}, 
    new {key = 2, value = false}, 
    new {key = 2, value = true}, 
    new {key = 3, value = false}, 
    new {key = 3, value = false}, 
    new {key = 3, value = false}, 
}; 
// the actual code 
var groups = from pair in list 
      group pair by pair.key into grp 
      orderby grp.Key 
      select new { 
       grp.Key, 
       Value = grp.Aggregate(false, (x, y) => x || y.value) 
      }; 
// display the result 
foreach (var grp in groups) 
{ 
    Console.WriteLine("{0}: {1}", grp.Key, grp.Value); 
} 

Notez que vous pouvez également utiliser Any pour faire l'ensemble, avec l'avantage que ce sera court-circuit plus tôt:

 select new { grp.Key, Value = grp.Any(y => y.value) };