2011-04-14 88 views
1

我有对象的列表(以对,在一,IsApproved是真实的,其他的,IsApproved是假的,即:LINQ - GroupBy配对对象的关键,然后将分组对象分成2个对象的列表?

public class Object 
{ 
    public int Id { get; set; } 
    public int MatchId { get; set; } 
    public string Name { get; set; } 
    public bool IsApproved { get; set; } 
} 

名单会是这样的:

1 123ABC SomeName True

2 123ABC SomeElse False

3 321CBA Name2 True

4 321CBA Name3 False

5 987ASD NameName True

6 987ASD TestTest False

我需要通过MatchId能够将它们分组,然后将它们分开,使我有一个新的列表如下:

public class Program 
{ 
    public List<PairedObject> PairedObjects { get; set; } 
} 

public class PairedObject 
{ 
    public Object IsApproved { get; set; } 
    public Object NotApproved { get; set; } 
} 

任何建议如何做到这一点?非常感谢你。

+0

'IsApproved'和'NotApproved'应该是相应项目的集合? – 2011-04-14 23:10:53

回答

4
list.GroupBy(o => o.MatchId) 
    .Select(g => new PairedObject 
        { 
         IsApproved = g.First(o => o.IsApproved), 
         NotApproved = g.First(o => !o.IsApproved) 
        }); 
+1

我会用Single替换First,并且不要忘记检查组中是否有2个以上。墨菲的法律和所有.. – Euphoric 2011-04-15 05:13:02

+0

工作就像一个魅力!谢谢。 – Saxman 2011-04-15 18:44:01