我想根据用户发布帖子的次数来订购一些帖子。
我有以下内容:
IList<User> orderTopContributors =
this.GetPosts()
.GroupBy(x => x.Author.Id)
.Select(x => new
{
AuthorCount = x.Count()
})
.OrderByDescending( x => x.AuthorCount )
.ToList();
我哪里错了?施法时出错:
严重级代码描述项目文件行错误CS0266不能 隐式转换类型'System.Collections.Generic.List&lt;项&GT;&GT;”至 'System.Collections.Generic.IList'。显式转换 存在(你是否错过演员表?)
答案 0 :(得分:1)
tl; dr:使用SelectMany
方法
你有几个错误:
首先 (您在编辑中修复此内容) ,您应该使用OrderByDescending
来获取最大的订单到最小的。
下一步 (您在编辑中修复此内容) ,您希望收到{{1} },或者将其更改为IList<User>
或在Linq的末尾添加IEnumrable<User>
。
最后,如果您想将论坛展平为一个列表,请使用SelectMany
并选择展开的列表:
示例代码:
.ToList()
当您使用IList<User> orderTopContributors = GetPosts()
.GroupBy(x => x.Id)
.Select(x => new
{
AuthorCount = x.Count(),
Posts = x
})
.OrderByDescending(x => x.AuthorCount)
.SelectMany(x => x.Posts)
.ToList();
时,您将.GroupBy
变为IEnumerable<User>
,因为少数群组(多次多次),使用{{3}方法,您说明要从每个组中获取哪个IEnumerable<IEnumerable<User>>
并将其汇总到最终结果:
示例伪:
IEnumerable<T>
var Users = new List<User>
{
{ UserID = 576, PostId = 7 },
{ UserID = 576, PostId = 4 },
{ UserID = 4, PostId = 2 },
{ UserID = 2, PostId = 5 },
{ UserID = 2, PostId = 1 },
{ UserID = 576, PostId = 9 }
}
var Ordered = Users
.GroupBy(x => x.UserID)
.Select(x => new
{
AuthorCount = x.Count(),
Posts = x
})
.OrderByDescending(x => x.AuthorCount)
.SelectMany(x => x.Posts)
.ToList();
现在是:
Ordered