【问题标题】:Linq to SQL duplicate rankLinq to SQL 重复排名
【发布时间】:2016-04-21 08:53:35
【问题描述】:

我正在尝试根据int 分数构建排行榜。我正在提取记录并计算排名,如下所示:

//Base query
var query = UoW.Repository<UserProfile>().Get().OrderByDescending(u => u.Points);

//Fetch the data including a groupby count
var data = await query
        .Skip(skip)
        .Take(pageSize)
        .Select(u => new UserListItem
        {
             Points = u.Points.ToString(),
             Username = u.DisplayName,
             Rank = query.Count(o => o.Points > u.Points) + 1 //Calculates the rank (index)
        })
        .GroupBy(u => new { Total = query.Count() })
        .FirstOrDefaultAsync();

这很好用,除非当我有 2 个或更多具有相同点的值时,它会重复位置。无论关系如何,我都需要它不断增加。这是当前显示结果的方式:

排名 |用户 |积分

  • 1 |用户 1 |第456章
  • 2 |用户 2 | 420
  • 3 |用户 3 | 402
  • 4 |用户 4 | 380
  • 4 |用户 5 | 380

知道如何让它正确地自动递增吗?

【问题讨论】:

    标签: c# entity-framework linq-to-entities


    【解决方案1】:

    解决方案是在 Rank 函数中添加更多条件,以确定在得分相同时哪个先出现。如果您愿意,它甚至可以按用户名 a-> z 进行排名。

    可以在this SO answer 中找到为您指明使用多个标准的正确方向的答案。

    【讨论】:

    • 如果我希望重复项按显示名称进行第二次排序怎么办。任何想法让查询做到这一点?
    猜你喜欢
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多