LINQ专家,我希望按用户更新最新数据,解释说我有一个表“虚拟”:
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来做到这一点。
感谢。
答案 0 :(得分:5)
您正在寻找的是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)
};
答案 1 :(得分:2)
以下方法也可以使用方法语法:
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());
答案 2 :(得分:-1)