我有一个表格,显示了从我们的移动用户到我们的数据库的同步列表。这意味着每个用户可以拥有数千条同步记录。
我写了一个使用 ROW_NUMBER()
的查询功能为每个用户和仅事件用户提取最近的同步,因为我不想看到已终止员工的同步数据。 (即用户 A 昨天中午同步,用户 A 今天中午同步,但我只想看到今天的同步)。
SELECT * FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY [SerialNumber] ORDER BY SyncDate DESC )as RN
FROM [TSCH].[dbo].[SYNCREPORT]
) as T
Where RN = 1 and WorkerStatus = 'ACTIVE' and SerialNumber = ######;
在 c# 中使用 LINQ 为我的 .net Web 应用程序编写此代码的最佳方法是什么?谢谢您的帮助!
最佳答案
可能是这样的
var result=yourtable.OrderBy(x=>x.SyncDate).GroupBy(x=>x.SerialNumber)
.Where(x=>x.WorkerStatus=="Active" && x.SerialNumber=="####")
.Select(g => new {g, count= g.Count()})
.SelectMany(t => t.g.Select(b => b)
.Zip(Enumerable.Range(1,t.count), (c,i) => new {c.value1, c,value2, rn = i}));
关于c# - LINQ 使用 ROW_NUMBER() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32027509/