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?)
感谢
您的查询返回的是记录分组,而您只是试图将查询结果分配给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关键字上。)