GroupBy в LINQ - PullRequest
       5

GroupBy в LINQ

0 голосов
/ 27 марта 2011

Мне нужно сгруппировать таблицу по месяцу в таблице.

Запрос выполняется следующим образом:

var query =
    from a in db.Dates
    from b in db.Facts
    where a.Count_Key == b.Date_key
    select new
    {
        a.Month,
        b.Fact_key
    };

Из этого запроса я пытаюсь сгруппировать по месяцам

query = query.GroupBy(x => x.Month);
Grid1.DataSource = query;
Grid1.DataBind();

Тогда я получаю следующую ошибку:

Не удается неявно преобразовать IGrouping инт? в IQueryable

Ответы [ 2 ]

1 голос
/ 27 марта 2011

Вы можете сделать это:

var query2 = query.GroupBy(x => x.Month);
Grid1.DataSource = query2;
Grid1.DataBind();

Проблема вызвана тем, что var query неявно выводится из его использования. query имеет тип IQueryable<SomeAnonymousType>, а метод GroupBy возвращает IQueryable<IGrouping<int?, SomeAnonymousType>>. Это просто два разных типа.

1 голос
/ 27 марта 2011

Вы не можете переназначить переменную запроса, поскольку результаты этих двух запросов имеют разные типы.

Ваш первый запрос по сути такой:

IQueryable<'a> query =
    from a in db.Dates
    from b in db.Facts
    where a.Count_Key == b.Date_key
    select new
    {
        a.Month,
        b.Fact_key
    };

Т.е. он возвращаетпрямой IQueryable анонимного типа.

Ваш второй запрос возвращает IQueryable<IGrouping<'a>>, то есть IQueryable группы анонимного типа:

IQueryable<IGrouping<'a>> groupedQuery = query.GroupBy(x => x.Month);

Следовательно, потому что возвращаемый результатразные типы, вы не можете присвоить результат группировки обратно исходной переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...