linq 如何在元素有重复项时对元素进行排名

mklgxw1f  于 2022-12-15  发布在  其他
关注(0)|答案(2)|浏览(157)

我正在尝试找出一种方法来对具有重复值的列表中的项目进行排名。
例如:
| QTECDE公司|等级|
| - ------|- ------|
| 四十|1个|
| 三十|第二章|
| 二十四|三个|
| 十八|四个|
| 四个|五个|
| 四个|五个|
| 三个|六个|
但我的代码总是跳过一个数字当我有一个重复的排名。这是我得到的:
| QTECDE公司|等级|
| - ------|- ------|
| 四十|1个|
| 三十|第二章|
| 二十四|三个|
| 十八|四个|
| 四个|五个|
| 四个|五个|
| 三个|7(7个,共6个)|
下面是我的代码:

var rankedList = oList.OrderByDescending(p => p.QTECDE)
                      .Select((p, i) => new { Order = 1 + i, lst = p })
                      .GroupBy(p => new { p.lst.QTECDE })
                      .SelectMany(g => g.Select(p => new
                                        {
                                         RANK = g.Min(x => x.Order),
                                         NO_ART = p.lst.NO_ART,
                                         QTECDE = p.lst.QTECDE,
                                         LIB_INDEX_FR_SUP = p.lst.LIB_NIVEAU_SUP_FR,
                                         LIB_IMAGE = p.LIB_IMAGE,
                                        }));

有什么办法吗?

iyfjxgzm

iyfjxgzm1#

您只需要组的索引,而不是项目的索引:

var rankedList = oList
    .OrderByDescending(p => p.QTECDE)
    .GroupBy(p => new { p.QTECDE })
    .SelectMany((g, groupIndex) => g
        .Select(p => new
        {
            RANK = groupIndex + 1,
            NO_ART = p.NO_ART,
            QTECDE = p.QTECDE,
            LIB_INDEX_FR_SUP = p.LIB_NIVEAU_SUP_FR,
            LIB_IMAGE = p.LIB_IMAGE,
        }));

字符串

tgabmvqs

tgabmvqs2#

您正在确定源项目的排名/顺序。您希望将(item, index)应用于您的SelectMany(),而不是应用于您的Select()

相关问题