2014-01-20 105 views
1

我只想使用LinqToSql類查詢。在這裏我只是想將這個sql查詢轉換爲適當的linq查詢。我怎麼寫這個sql查詢linq查詢

這是我的SQL查詢:

SELECT j.[JobID], p.[PreparedEmailID], 
     p.[Name] AS 'PreparedEmailName', 
     j.[CreatedOn], j.[CompletedOn], 
     j.[SubscriberCount], j.[EmailsSent], 
     (SELECT TOP 1 [Message] FROM 
     [LoggedMessages] WHERE [JobID] = 
     j.[JobID] ORDER BY [LoggedMessageID] DESC) 
     AS 'LoggedMessage' FROM [Jobs] AS j 
     INNER JOIN [PreparedEmails] AS p 
     ON p.[PreparedEmailID] = 
     j.[PreparedEmailID] 

和我產生的LINQ查詢是這樣的:

var query = from j in db.Jobs 
         join p in db.PreparedEmails on j.PreparedEmailID equals p.PreparedEmailID 
         join l in db.LoggedMessages on j.JobID equals l.JobID into ej 
         from l in ej.DefaultIfEmpty() orderby l.LoggedMessageID descending 
         orderby l.LoggedMessageID descending 
         orderby j.CreatedOn descending 
         select new 
         { 
          JobID = j.JobID, 
          PreparedEmailID = p.PreparedEmailID, 
          PreparedEmailName = p.Name, 
          CreatedOn = j.CreatedOn, 
          CompletedOn = j.CompletedOn, 
          SubscriberCount = j.SubscriberCount, 
          EmailsSent = j.EmailsSent, 
          LoggedMsg = l.Message 
         }; 
+0

有我的查詢問題,我在這裏如何選擇LoggedMessage只有頂行與orerby l.LoggedMessageID ... –

回答

0

這是解決方案:

var query = from j in db.Jobs 
         join p in db.PreparedEmails on j.PreparedEmailID equals p.PreparedEmailID 
         orderby j.CreatedOn descending 
         select new 
         { 
          JobID = j.JobID, 
          PreparedEmailID = p.PreparedEmailID, 
          PreparedEmailName = p.Name, 
          CreatedOn = j.CreatedOn, 
          CompletedOn = j.CompletedOn, 
          SubscriberCount = j.SubscriberCount, 
          EmailsSent = j.EmailsSent, 
          LoggedMsg = (from l in db.LoggedMessages 
             where j.JobID == l.JobID 
             orderby l.LoggedMessageID descending 
             select l.Message).FirstOrDefault() 
         }; 
0

我準備了一些LINQ查詢你(但我沒有在VS測試它,因爲我現在無法訪問它,所以請小心,因爲它可能包含一些錯誤):

var list = from Jobs 
       join PreparedEmails on Jobs.PreparedEmailID == PreparedEmails.PreparedEmailID 
       join LoggedMessages on LoggedMessages.JobID == Jobs.JobID 
       select 
       { 
       JobID = Jobs.JobID, 
         PreparedEmailID = PreparedEmails.PreparedEmailID, 
         PreparedEmailName = PreparedEmails.Name, 
         CreatedOn= Jobs.CreatedOn, 
         CompletedOn = Jobs.CompletedOn, 
         SubscriberCount = Jobs.SubscriberCount, 
         EmailsSent = Jobs.EmailsSent, 
         LoggedMessage = LoggedMessages.Message 
      } orderby descending LoggedMessages.LoggedMessageID; 

它應該有助於一個litt樂有點...