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

时间:2013-05-29 18:23:38

标签: c# sql linq

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来做到这一点。

感谢。

3 个答案:

答案 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)

检查:

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

参考来自:link