Linq to Entities - GroupBy

时间:2012-02-09 19:22:07

标签: c# linq entity-framework linq-to-entities

我正在尝试通过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 个答案:

答案 0 :(得分:10)

您的查询正在返回记录分组 - 而您只是尝试将查询结果分配给IList<Records>。您是否只对前三个实际记录感兴趣?如果是这样,您可以使用:

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

......但在那时,目前尚不清楚分组的重点是什么。如果您想为每个ID选择一个记录,您可以使用:

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();

答案 1 :(得分:3)

由于错误明确指出,GroupBy会返回一组分组,而不是一组记录。

答案 2 :(得分:-1)

如果执行此操作,结果将不会是IList。 试试这个,你会看到:

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

将cursur移到Visual Studio中的var关键字上。 ;)