繁体   English   中英

SQL到LINQ / Lambda转换

[英]SQL to LINQ/Lambda translation

var sql =   from s in context.Sessions
            from q in context.Questions
                  .Where(q => q.SessionId == s.SessionId)
            from a in context.Answers
                  .Where(a => a.QuestionId == q.QuestionId)
            select new { q.QuestionId, q.QuestionContent, a.AnswerContent };

//转换为SQL为:

SELECT 
    [Extent1].[SessionId] AS [SessionId], 
    [Extent1].[QuestionId] AS [QuestionId], 
    [Extent1].[QuestionContent] AS [QuestionContent], 
    [Extent2].[AnswerContent] AS [AnswerContent]
    FROM  [dbo].[Question] AS [Extent1]
    INNER JOIN [dbo].[Answer] AS [Extent2] ON [Extent1].[QuestionId] = [Extent2].[QuestionId]
    WHERE [Extent1].[SessionId] IS NOT NULL

问题是:如何使用lambda表达式/ LINQ联接3个与SQL相同的表:

SELECT q.QuestionContent, a.AnswerContent, a.QuestionId
from Question as q
inner join Session as s
    on q.SessionId = s.SessionId
inner JOIN Answer as a
    on a.QuestionId = q.QuestionId
where q.SessionId = 976
group by a.QuestionId

尝试这个

var sql = (db.Sessions.
             Join(db.Questions, q => q.SessionId, s => s.SessionId,
             (q, s) => new { q, s }).
             Join(db.Answers, a => a.s.QuestionId, qu => qu.QuestionId, (a, qu) => new { a, qu })
             .Where(m => m.qu.QuestionId == 1).Select (m => new {m.qu.AnswerContent,m.a.s.QuestionId,m.a.s.QuestionContent}));

希望对您有所帮助。

尝试这个:

var sql =
    from s in context.Sessions
    join q in context.Questions on s.SessionId equals q.SessionId
    join a in context.Answers on q.QuestionId equals a.QuestionId
    where q.SessionId == 976
    select new { q.QuestionId, q.QuestionContent, a.AnswerContent };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM