2013-05-29 3 views
1

экспертов 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.

Спасибо.

+0

Я не думаю, что второй вложенный запрос необходим, так как вы уже группируете идентификатор пользователя. – Stickman

ответ

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()); 
5

Что вы ищете, это GroupBy в LINQ. Что-то вдоль этих линий:

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

Отличный ответ, хотя я искал полную запись, как в принятом ответе. –

-1

Убедитесь, что:

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

справки: link

+0

Ум, как это отвечает на вопрос? OP ищет «самую последнюю запись для каждого UserId», которая не имеет никакого отношения к «Max of UserID». Ваш связанный ответ ожидает только возвращения одной строки. – gunr2171

Смежные вопросы