LINQ组项目。单个项目可能在几个组中

时间:2010-08-25 23:05:07

标签: c# linq linq-group

我有一个IEnumerable项目,我想根据相关类别进行分组。这些项目按照与它们相关联的类别进行分组 - 这是一个列表 - 因此单个项目可能是多个类别的一部分。

var categories = numbers.SelectMany(x => x.Categories).Distinct();
var query = 
      from cat in categories
      select new {Key = cat, 
                  Values = numbers.Where(n => n.Categories.Contains(cat))};

我使用上面的代码,它实际上确实有效,但我想知道是否有更有效的方法来执行此操作,因为当数字包含数千个值时,此操作可能会执行得很慢。

我几乎要求重构代码以提高效率。

1 个答案:

答案 0 :(得分:2)

您可以使用LINQ的内置分组功能,该功能应该比包含查找更快。但是,与任何与性能相关的问题一样,在决定如何重写您知道的代码之前,您应该编写代码来收集性能指标。可能会发现,您将使用的卷根本没有性能问题。

所以,这是代码。这没有经过测试,但它应该有用:

var result = from n in numbers
             from c in n.Categories
             select new {Key = c, n.Value}
             into x group x by x.Key into g
             select g;

每个组都包含一个键和一系列属于该键的值:

foreach( var group in result )
{
    Console.WriteLine( group.Key );
    foreach( var value in group )
        Console.WriteLine( value );
}