使用LINQ嵌套查询获取最新行进行更新

本文关键字:更新 最新 获取 LINQ 嵌套 查询 使用 | 更新日期: 2023-09-27 18:15:51

LINQ专家,我希望以每个用户为基础更新最新数据,解释说我有一个表"dummy":

CREATE TABLE [dbo].[dummy](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [TimeStamp] [datetime] NOT NULL,
    [UserId] [int] NOT NULL,
    [TransAmount] [decimal](10, 4) NOT NULL
) ON [PRIMARY]

我想做的是得到每个UserId的最新记录,使用SQL,我会使用如下:

select * from dummy d1 join 
(
select max(id) as id 
from dummy d1
Join (select distinct userid from dummy) d2 on d1.userid = d2.userid
group by d1.userid)
as d2 on d1.id = d2.id

但是我希望使用LINQ来做到这一点。

谢谢。

使用LINQ嵌套查询获取最新行进行更新

您要查找的是LINQ中的GroupBy。下面的内容:

var users = from d in dummy
            group d by d.userId into u
            select new 
            {
               UserId = u.Key
               Id = u.Max(i => i.Id)
            };

使用方法语法也可以:

var maxIds = dummy.GroupBy(d => d.UserId, (userId, dummyGroup) => 
dummyGroup.Max(dg => dg.Id));

如果您想要整个记录,您可以使用以下命令:

var recordsWithMaxId = dummy.GroupBy(d => d.UserId, (userId, dummyGroup) => 
dummyGroup.OrderByDescending(dg => dg.Id).First());

检查:

var maxID = dummy.Max(i => i.UserID)
var row = table.First(i => i.UserID == maxID);

reference from: link