Linq to Entities - GroupBy - PullRequest
       4

Linq to Entities - GroupBy

0 голосов
/ 09 февраля 2012

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

IList<Records> dbobjs = dbContext.Records
         .OrderByDescending(t => t.Id)
         .GroupBy(t => t.Id)
         .Take(3)
         .ToList();

Это не работает ... Что я делаю неправильно?Его поговорка:

Cannot implicitly convert type 'System.Collections.Generic.List<System.Linq.IGrouping<System.Guid,DataAccessLayer.Records>>' to 'System.Collections.Generic.IList<DataAccessLayer.Records>'. An explicit conversion exists (are you missing a cast?)

Спасибо

Ответы [ 3 ]

10 голосов
/ 09 февраля 2012

Ваш запрос возвращает группировки записей, в то время как вы просто пытаетесь присвоить результат запроса IList<Records>.Вы интересуетесь только первыми тремя актуальными записями?Если это так, вы можете использовать:

IList<Records> dbobjs = dbContext.Records
         .OrderByDescending(t => t.Id)
         .GroupBy(t => t.Id)
         .SelectMany(group => group) // Flatten again
         .Take(3)
         .ToList();

... но в этот момент неясно, в чем смысл группировки.Если вы хотите выбрать одну запись с каждым идентификатором, вы можете использовать:

IList<Records> dbobjs = dbContext.Records
         .OrderByDescending(t => t.Id)
         .GroupBy(t => t.Id)
         .Take(3)
         .Select(group => group.First())
         .ToList();

РЕДАКТИРОВАТЬ: если вам нужны только GUID, вы должны использовать:

IList<Guid> guids = dbContext.Records
         .OrderByDescending(t => t.Id)
         .GroupBy(t => t.Id)
         .Take(3)
         .Select(group => group.Key)
         .ToList();
3 голосов
/ 09 февраля 2012

Как ясно указывает на ошибку, GroupBy возвращает набор групп, а не набор записей.

0 голосов
/ 09 февраля 2012

Если вы выполните это, результат не будет IList. Попробуйте это, вы увидите:

var dbobjs = dbContext.Records
         .OrderByDescending(t => t.Id)
         .GroupBy(t => t.Id)
         .Take(3)
         .ToList();

Наведите курсор на ключевое слово var в Visual Studio. ;)

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