1

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

谢谢。

4

3 回答 3

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)
            };
于 2013-05-29T18:33:11.157 回答
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());
于 2013-05-29T20:39:07.160 回答
-1

检查:

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

参考来自:链接

于 2013-05-29T18:40:01.597 回答