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