Использование Linq для GroupBy и выберите - PullRequest
1 голос
/ 13 января 2012

Я хочу сделать GroupBy и Select в Linq, но следующее не компилируется:

foreach (string fooName in fooList.GroupBy(f => f.Name).Select(f => f.Name))
{
    ...
}

Почему я не могу использовать f => f.name в моем предложении Select? Что еще более важно, есть ли способ обойти это?

Ответы [ 2 ]

5 голосов
/ 13 января 2012

GroupBy возвращает последовательность IGrouping<TKey, TSource>, поэтому лямбда-параметр в методе Select имеет тип IGrouping<TKey, TSource>, а не TSource.Вместо этого вы можете сделать это:

foreach (string fooName in fooList.GroupBy(f => f.Name).Select(grouping => grouping.Key))
{
    ...
}

Но в любом случае, есть более простой способ добиться того же результата:

foreach (string fooName in fooList.Select(f => f.Name).Distinct())
{
    ...
}
1 голос
/ 13 января 2012

GroupBy группирует значения в пары ключ-значение, так что вы, вероятно, хотите

 foreach (string fooName in fooList.GroupBy(f => f.Name).Select(f => f.Key))
 {
    ...
 }
...