2012-02-07 51 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