Linq to sql 如何将此sql查询写入linq查询

Linq to sql 如何将此sql查询写入linq查询,linq-to-sql,Linq To Sql,我只想使用LinqToSql类查询。这里我只想将这个sql查询转换为适当的linq查询 这是我的sql查询: SELECT j.[JobID], p.[PreparedEmailID], p.[Name] AS 'PreparedEmailName', j.[CreatedOn], j.[CompletedOn], j.[SubscriberCount], j.[EmailsSent], (SELECT TOP 1 [Message

我只想使用LinqToSql类查询。这里我只想将这个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
                        };

我为您准备了一些linQ查询(但我没有在VS中测试它,因为我现在无法访问它,所以请小心,因为它可能包含一些错误):

这应该有点帮助…

这是一个解决方案:

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()
                        };

我在这里的查询中遇到了一个问题,我如何使用orerby l.LoggedMessageID仅选择LoggedMessage的顶行。。。
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()
                        };