我有一个SQL查询,按多个字段对参与者进行排名.我需要将其转换为LINQ,我知道它没有排名功能.有人可以帮忙转换吗?
如果有帮助,这就是它的作用.此查询从参与者表中提取参与者,并根据列出的字段对其进行排名RANK() OVER (ORDER BY W desc, L asc, RW asc, RL desc, HP desc, TB desc) AS RANK.接下来我只抓住那些排名第一或第二的人Where q1.RANK in ('1','2'),看看这两个排名是否有任何联系Having count(q1.ParticipantID) > 1
Select q1.RANK, count(q1.ParticipantID) as 'Count'
From (
Select Distinct ParticipantID, RANK() OVER (ORDER BY W desc, L asc, RW asc, RL desc, HP desc, TB desc) AS RANK
From vGroupStandings
Where CompetitionID = 8
and GroupNumber = 1
and EventID = 6
) as q1
Where q1.RANK in ('1','2')
Group By q1.RANK
Having count(q1.ParticipantID) > 1
Run Code Online (Sandbox Code Playgroud)
UPDATE
这是选择所有字段的数据

以下是子查询中过滤数据的示例.从那一组,我看看是否有超过1记录在排名1或排名2.

响应
感谢您到目前为止的回复,我会告诉您什么时候可以尝试这些.这是另一个问题.改为从控制器调用存储过程会更好吗?这样我就可以保留SQL查询.我有许多大型查询,我将不得不运行涉及排名.我想知道它是否比重写LINQ中的所有内容更容易.
像这样的东西......这是伪代码......我没有测试。
如果您提供任何示例数据和预期输出,那么我会这样做
var inner = datasource
.OrderByDesc(x => x.W)
.ThenBy(x => x.L)
// etc for all orders you need
.GroupBy(new { W = W, L = L, RW = RW, RL = RL, HP = HP, TB = TB })
.First(2);
if (inner[0].Count > 1 || inner[1].Count[1] > 1)
{
Console.Writeline("1 "+inner[0].Count.ToString());
Console.Writeline("2 "+inner[1].Count.ToString());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1735 次 |
| 最近记录: |