在linq中使用group by来选择聚合记录

时间:2012-04-01 21:56:15

标签: c# linq collections group-by

linq集合由SearchResult对象组成。

SearchResult包含:id(number),categoryName(string)

我想使用linq选择所有聚合类别的新集合(即,如果至少有一个带有类别A的搜索结果,则在集合中包含类别A)。

如果可能,按字母顺序对结果进行排序。

示例:

搜索结果:

1,计算机

2,IT

3,财务

4,财务

5,新闻

6,天气

7,IT

8,时尚

最终收藏:(计算机,时装,金融,IT,新闻,天气)。

这是我到目前为止所得到的:

SearchResultsCollection是IEnumerable

var categs = SearchResultsCollection.GroupBy(f => GetCategory(f))
           .Select(GetCategory(f)).ToList();

1 个答案:

答案 0 :(得分:2)

在这种情况下你可以GroupBy,但是没有必要,因为你无论如何都要投射到一个原始属性 - 首先分组,选择组密钥和顺序:

var categs = SearchResultsCollection.GroupBy(f => f.categoryName)
                                    .Select(g => g.Key)
                                    .OrderBy(f => f)
                                    .ToList();

或者更轻松地使用Distinct()

var categs = SearchResultsCollection.Select(f=> f.categoryName)
                                    .Distinct()
                                    .OrderBy(c => c)
                                    .ToList();