例如,在数据库(SQL Server)中,一列的值如下:
Col1
====
10
5
15
20
5
10
2
这就像整数数据列表。
排名应为:
Col1 Rank
==== ====
20 1
15 2
10 3
10 3
5 4
5 4
2 5
我已经尝试过以下方式:
1) First sort the list of data in descending order of "Col1" value
2) Find the index of a particular record using FindIndex() method.
3) Then Rank = Index + 1
但是,只有在数据唯一的情况下它才起作用。当索引返回时,在多行中存在相同的“ Col1”值时,它将失败0, 1, 2, 3, 4, 5, 6
。
当列表包含使用C#LINQ不能区分的数据(在大多数情况下!)时,如何计算排名?
为什么不在数据库中呢?
SELECT [Col1], DENSE_RANK() OVER (ORDER BY Col1 DESC) AS [Rank]
FROM Table
但是,如果您必须在C#中执行此操作
var data = new List<int>();
var rankings = data.OrderByDescending(x => x)
.GroupBy(x => x)
.SelectMany((g, i) =>
g.Select(e => new { Col1 = e, Rank = i + 1 }))
.ToList();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句