2012-02-07 55 views
1

我有一个包含以下字段的SQL Server表的困难:LINQ到SQL服务器 - 与子查询示例

  • 的SessionID(GUID)
  • 消息(VARCHAR)
  • 时间戳(日期时间)

我需要做的是使用LINQ to SQL拉出对于每个会话ID的第一条记录(最好为拉姆达,但查询语法将是有益的)

这是比较简单的用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) 

我试图做同样的拉姆达查询(使用连接),但它只是不工作...

任何/所有的帮助将不胜感激。

在此先感谢

格里夫

回答

1

我不知道如果我是simplistic--但如果这是一个表,那么这应该工作?

db.Applog.GroupBy(a=>a.SessionID).Select(g=>g.OrderBy(m=>m.Timestamp).First()); 
+0

虽然弗兰克的回答是完全正确的,这似乎更加简洁。 – DrGriff 2012-02-08 09:02:15

+0

感谢DrGriff。 – 2012-02-08 15:11:20

1

您试过使用linquer吗? http://www.sqltolinq.com/

查询语法可能看起来比一个lambda更好一点 -

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 
    }; 
+0

像梦一样工作 - Linqer看起来像一个必须拥有的,谢谢你的提示弗兰克。 – DrGriff 2012-02-08 08:08:21