IGrouping и кастинг в Linq - PullRequest
4 голосов
/ 06 мая 2010

У меня следующий запрос:

var groupCats =
            from g in groups
            group g by g.Value into grouped
            select new
            {
                GroupCategory = grouped.Key,
                Categories = GetCategories(grouped.Key, child)
            };

Это отлично работает. В возвращаемом анонимном типе GroupCategory является строкой, а Categories является Enumerable - как правильно объявить это вместо использования 'var'?

Я пытался:

IGrouping<string,string> groupCats =
            from g in groups
            group g by g.Value into grouped
            select new
            {
                GroupCategory = grouped.Key,
                Categories = GetCategories(grouped.Key, child)
            };

и

IGrouping<string,Enumerable<string>> groupCats =
            from g in groups
            group g by g.Value into grouped
            select new
            {
                GroupCategory = grouped.Key,
                Categories = GetCategories(grouped.Key, child)
            };

В обоих случаях я получаю:

Невозможно выполнить преобразование типа implicity .... Существует явное преобразование (вы пропустили приведение)

Как мне разыграть это?

Ответы [ 3 ]

3 голосов
/ 06 мая 2010

Для этого вам нужно определить конкретный тип. Оператор select new будет возвращать анонимный тип, поэтому у вас будет перечисляемый анонимный тип. Если вы хотите что-то еще, вы должны определить класс и затем использовать select new MyClass вместо этого, давая вам IEnumerable MyClass.

3 голосов
/ 06 мая 2010

В этом случае вы должны использовать var, потому что у вас есть анонимный тип.Эта ситуация фактически является причиной, по которой необходимо было добавить var к языку.Если вы хотите написать явный тип вместо var, тогда вам нужно выбрать конкретный класс, который должен быть где-то определен.Тогда ваш код может выглядеть так:

IEnumerable<MyClass> groupCats =
    from g in groups
    group g by g.Value into grouped
    select new MyClass
    {
        GroupCategory = grouped.Key,
        Categories = GetCategories(grouped.Key, child)
    };

Я подозреваю, что приведенный выше запрос неверенВы выполняете группировку, но затем используете только grouped.Key.

0 голосов
/ 07 мая 2010

Вы можете написать запрос так:

from g in groups 
group g by g.Value

В этом случае тип

IEnumerable<IGrouping<KeyType, GType>> groupCats = 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...