我正在尝试通过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?)
由于
答案 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关键字上。 ;)