使用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 (将#修改为@)