如何解决使用Linq的密集排名C#数据表
我有以下过于复杂的SQL,我正在尝试将其转换为LINQ。
我不认为我必须像这些语句一样嵌套LINQ,因为分区不使用嵌套的密集列,但是我不确定这是否正确。
我的计划是根据每个单独的密集列语句在C#中创建新列。例如,dt [“ L”]将等于以下LINQ。但是我无法弄清楚LINQ应该是什么,以及是否可以破坏此嵌套。
示例片段:
"DENSE_RANK () OVER (PARTITION BY a0.[C],a0.[G] ORDER BY a0.[J] DESC) AS [L]"
"...WHERE [L] = 1 "
var res = from element in dt.AsEnumerable()
.GroupBy(x => new { C = x["C"],G = x["G"] })
.Select( x => x)
.OrderByDescending(x => x["J"]).First();
完整的SQL:
SELECT /*L3*/ DISTINCT
[A] AS [A],[B] AS [B],[C] AS [C],[D] AS [D],[E] AS [E],[F] AS [F],[G] AS [G],[H] AS [H],[I] AS [I],[J] AS [J],[K] AS [K]
FROM
(
SELECT /*L2*/
[A] AS [A],[K] AS [K],[L] AS [L],[M] AS [M],DENSE_RANK () OVER (PARTITION BY [C],[D],[E],[K] ORDER BY [H] DESC) AS [N]
FROM
(
SELECT /*L1*/
[A] AS [A],DENSE_RANK () OVER (PARTITION BY [C],[G] ORDER BY [K] DESC) AS [M]
FROM
(
SELECT /*L0*/
a0.[A] AS [A],a0.[B] AS [B],a0.[C] AS [C],a0.[D] AS [D],a0.[E] AS [E],DENSE_RANK () OVER (PARTITION BY a0.[C],a0.[D] ORDER BY a0.[E] ASC) AS [F],a0.[G] AS [G],a0.[H] AS [H],a0.[I] AS [I],a0.[J] AS [J],a0.[K] AS [K],DENSE_RANK () OVER (PARTITION BY a0.[C],a0.[G] ORDER BY a0.[J] DESC) AS [L]
FROM
[table] a0
) t /*L0*/
WHERE
[L] = 1
) t /*L1*/
WHERE
[M] = 1
) t /*L2*/
WHERE
[N] = 1
ORDER BY
[K] Desc
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。