2012-02-01 101 views
3

我使用下面的代码编组的工具集合:LINQ到集集团通过获取原始实体回

var filteredTools = from t in tools 
           group t by new { t.ModuleName,t.Number} 
           into g 
           select new { ModuleName = g.Key, Values = g }; 

工具是被定义为一个简单的集合如下:

List<Tool> tools 

分组后执行我得到3行(从40行),所以分组工作。行具有g.Key的关键字,而值是分组条件。无论如何要把它与原始工具联系起来。也许每个工具的关键点应该是唯一的,所以在执行分组后,我可以从工具集合中获取原始工具。

回答

7

是,这些工具仍然存在各组内:

foreach (var group in filteredTools) 
{ 
    // This is actually an anonymous type... 
    Console.WriteLine("Module name: {0}", group.ModuleName); 
    foreach (Tool tool in group.Values) 
    { 
     Console.WriteLine(" Tool: {0}", tool); 
    } 
} 

说实话,你真的不需要这里选择你的匿名类型。您可以使用:

var filteredTools = tools.GroupBy(t => new { t.ModuleName,t.Number}); 
foreach (var group in filteredTools) 
{ 
    // This is actually an anonymous type... 
    Console.WriteLine("Module name: {0}", group.Key); 
    foreach (Tool tool in group) 
    { 
     Console.WriteLine(" Tool: {0}", tool); 
    } 
}