2010-10-05 73 views
2

我有以下列表:帮助在LINQ查询与GROUP BY

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

我想LINQ查询得到一个集合,如下所示:

键,或者操作分组的项目之间,为例如:

2: false | true = true 

结果必须是:

1: true 
2: true 
3: false 

在此先感谢

回答

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

注意你也可以使用Any做骨料,其优点是它会短路越早:

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