Linq to SQL Server - сложность с примером подзапроса - PullRequest
1 голос
/ 07 февраля 2012

У меня есть таблица SQL Server, которая содержит следующие поля:

  • SessionId (guid)
  • Сообщение (varchar)
  • метка времени (datetime)

Что мне нужно сделать, это вытащить ПЕРВУЮ запись для КАЖДОГО SessionId, используя LINQ to SQL (в идеале, как лямбда, но синтаксис запроса будет полезен)

Это относительно просто сделать с помощью t-SQL ....

SELECT al.Message, al.SessionId, al.Timestamp
FROM AppLog AS al
WHERE al.Timestamp = 
(select MIN(al2.Timestamp) from ApplicationLog as al2 where al2.SessionId = al.SessionId)

Я пытался сделать то же самое с лямбда-запросом (используя соединения), но он просто не работает ...

Любая / вся помощь будет высоко ценится.

Заранее спасибо

Griff

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Вы пробовали использовать linquer?http://www.sqltolinq.com/

Синтаксис запроса может выглядеть немного лучше, чем лямбда -

var x = from al in db.AppLog
where al.Timestamp == 
  (from al2 in db.ApplicationLog on al2.SessionId equals al.SessionID
   select al2.Timestamp).Min())
select new
  {
    al.Message,
    al.SessionId,
    al.Timestamp
  };
1 голос
/ 07 февраля 2012

Не знаю, насколько я упрощен - но если это одна таблица, тогда это должно сработать?

db.Applog.GroupBy(a=>a.SessionID).Select(g=>g.OrderBy(m=>m.Timestamp).First());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...