Linq to Entities - GroupBy

本文关键字:GroupBy Entities to Linq | 更新日期: 2023-09-27 18:23:52

我试图按Guid(最常用的)对一堆记录进行排序,然后按此列分组,并取最常用的前3个Guid。

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?)

感谢

Linq to Entities - GroupBy

您的查询返回的是记录分组,而您只是试图将查询结果分配给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();

正如错误明确指出的那样,GroupBy返回一组分组,而不是一组记录。

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

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

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