2011-03-31 52 views
0

我有结构如下C#LINQ分组问题

public MyObject{ 
    int SomeNumber {get;set;} 
    Object SomeObject {get;set;} 
    Object SomeOtherObject {get;set;} 
} 

现在SomeNumber不是唯一的,如果我有一个IEnumerable我怎么能拉出一个IEnumerable<MyObject>,所有具有相同SomeNumber值的对象?

我想我需要使用GroupBy来做到这一点?但似乎无法做到。

编辑:我不知道SomeNumber是什么。

回答

2
var myObjects = new List<MyObject>(); // fill   

var groups = from item in myObjects group item by item.SomeNumber; 
// alternatively: 
// var groups = myObjects.GroupBy(item => item.SomeNumber) 

foreach (var g in groups) 
{ 
    var someNumber = g.Key; 
    var members = g.ToList(); 
} 

应该做的。

+2

你应该可以将'g代入g选择g' – StriplingWarrior 2011-03-31 16:16:03

+0

@StriplingWarrior:酷,调整 – skarmats 2011-03-31 16:24:06

2
IEnumerable<MyObject> source = something; 
var grouped = source.GroupBy(s => s.SomeNumber); 
5

没有必要为GroupBy,除非你想分组。

IEnumerable<MyObject> myEnumerable ... 
myEnumerable.Where(o => o.SomeNumber == value); 
+0

很好的答案。但是,只要你想要多个'SomeNumber'的项目,你最好将它们分组。特别是,因为您可能不知道,您在哪个'SomeNumber'中感兴趣。 – skarmats 2011-03-31 16:15:57

+0

我不知道它的价值。这在我的问题中可能不太清楚。 – LiamB 2011-03-31 16:16:14