c# – 将SQL子查询转换为In到Linq Lambda
发布时间:2020-12-16 01:42:42 所属栏目:百科 来源:网络整理
导读:如何将以下SQL语句转换为Lambda表达式或 Linq查询? 以下查询获取每个问题的单个最新答案.或者用另一种方式表达,用最新的答案得到每个问题. 这也将由Entity Framework执行. SELECT Answers.*FROM AnswersWhere AnswerID IN( SELECT Max(AnswerID) AnswerID F
如何将以下SQL语句转换为Lambda表达式或
Linq查询?
以下查询获取每个问题的单个最新答案.或者用另一种方式表达,用最新的答案得到每个问题. 这也将由Entity Framework执行. SELECT Answers.* FROM Answers Where AnswerID IN ( SELECT Max(AnswerID) AnswerID FROM Answers GROUP BY QuestionID ) 这是使用Inner Join查看上一个查询的另一种方法 SELECT answers.* FROM answers INNER JOIN ( SELECT Max(answerID) answerID --,QuestionSiteID FROM answers GROUP BY QuestionID ) t ON answers.answerID = t.answerID 我已经读过LINQ Contains方法对于访问SQL的查询来说是次优的. 解决方法
我想你可以用以下方法做到这一点:
var subQuery = from a in answers group a by a.QuestionID into grouping select new { QuestionID = grouping.Key,MaxAnswerID = grouping.Max(x => x.AnswerID) }; var query = from a in answers from s in subQuery where a.AnswerID == s.MaxAnswerID select a; 这会在生成的SQL中生成CROSS JOIN 此外,您可以在查询的第二部分中使用join: var query = from a in answers join s in subQuery on a.AnswerID equals s.MaxAnswerID select a; 这导致SQL中的INNER JOIN 关于附带案例的注意事项 – 上面的答案做出了合理的假设,即AnswerID是Answers的主键 – 如果碰巧有一个键入的表设计(AnswerID,QuestionID),那么你需要同时加入AnswerID和QuestionID喜欢: var subQuery = from a in answers group a by a.QuestionID into grouping select new { QuestionID = grouping.Key,MaxAnswerID = grouping.Max(x => x.AnswerID) }; var query = from a in answers from s in subQuery where a.AnswerID == s.MaxAnswerID && a.QuestionID == s.QuestionID select a; 有关此备用表设计的更多讨论,请参阅注释跟踪… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容