2014-01-20 2 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; 

это должно помочь ЛИТТАМ ле немного ...

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