2011-04-14 35 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