按分组数量

时间:2015-10-01 11:09:39

标签: c# linq

我想根据用户发布帖子的次数来订购一些帖子。

我有以下内容:

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'。显式转换   存在(你是否错过演员表?)

1 个答案:

答案 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