2012-04-01 60 views
0

linq集合由SearchResult对象组成。使用linq中的组来选择聚合记录

SearchResult都包含:ID(数字),类别名称(字符串)

我想使用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(); 

回答

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();