используя группу в linq для выбора агрегированных записей - PullRequest
0 голосов
/ 02 апреля 2012

Коллекция linq состоит из объекта SearchResult.

SearchResult содержит: id (номер), categoryName (строка)

Я хочу выбрать в новую коллекцию, используя linq всеагрегированные категории (то есть, если имеется хотя бы один результат поиска с категорией A, включите в коллекцию категорию A.)

Если возможно отсортировать результаты по алфавиту.

Пример:

Результаты поиска:

1, Компьютеры

2, IT

3, Финансы

4, Финансы

5, Новости

6, Погода

7, IT

8, Fashion

Полученная коллекция: (Компьютеры, Мода, Финансы, IT, Новости, Погода).

Вот что у меня получилось:

SearchResultsCollection is IEnumerable

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

1 Ответ

2 голосов
/ 02 апреля 2012

В этом случае вы можете 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();
...