在 Linq 查询左外连接中需要帮助
我如何在 LINQ 中编写此内容:
SELECT
T.TestId,
S.SubjectName+' >> '+T.TestName +' ('+ CONVERT(VARCHAR(10),COUNT(Q.TestId)) +')' TestData
FROM
Test T LEFT OUTER JOIN Subject S
ON T.SubjectId = S.SubjectId
LEFT OUTER JOIN Quest Q
ON T.TestId = Q.TestId
GROUP BY
Q.TestId,
T.TestId,
T.TestName,
S.SubjectName
ORDER BY
COUNT(Q.TestId) DESC
在编写 Left Outer Join & 时需要帮助在 LINQ 中分组。
案例二:
SELECT
S.SubjectName,
T.TestName,
Q.Question,
A.Answer,
A.IsCorrect
FROM Ans A
INNER JOIN Quest Q
ON A.QuestId = Q.QuestId
AND A.QuestId IN ( SELECT
Q.QuestId
FROM Quest Q
INNER JOIN Test T
ON Q.TestId = T.TestId )
INNER JOIN Subject S
ON A.SubjectId = S.SubjectId
INNER JOIN Test T
ON A.TestId = T.TestId
谢谢。
how can i write this in LINQ :
SELECT
T.TestId,
S.SubjectName+' >> '+T.TestName +' ('+ CONVERT(VARCHAR(10),COUNT(Q.TestId)) +')' TestData
FROM
Test T LEFT OUTER JOIN Subject S
ON T.SubjectId = S.SubjectId
LEFT OUTER JOIN Quest Q
ON T.TestId = Q.TestId
GROUP BY
Q.TestId,
T.TestId,
T.TestName,
S.SubjectName
ORDER BY
COUNT(Q.TestId) DESC
Need help in writing Left Outer Join & Group by in LINQ .
Case II :
SELECT
S.SubjectName,
T.TestName,
Q.Question,
A.Answer,
A.IsCorrect
FROM Ans A
INNER JOIN Quest Q
ON A.QuestId = Q.QuestId
AND A.QuestId IN ( SELECT
Q.QuestId
FROM Quest Q
INNER JOIN Test T
ON Q.TestId = T.TestId )
INNER JOIN Subject S
ON A.SubjectId = S.SubjectId
INNER JOIN Test T
ON A.TestId = T.TestId
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
要在 Linq 中执行外连接,您需要使用
DefaultIfEmpty
扩展方法:请注意,您不需要同时使用
t.TestId
和q.TestId< /code> 位于
group by
子句中,因为它们具有相同的值。对于最后一部分,我使用AsEnumerable
以便最终投影在内存中而不是在数据库中执行,从而可以使用string.Format
。To perform an outer join in Linq, you need to use the
DefaultIfEmpty
extension method:Note that you don't need both
t.TestId
andq.TestId
in thegroup by
clause, since they will have the same value. For the last part, I'm usingAsEnumerable
so that the final projection is performed in memory rather than in the DB, which enables the use ofstring.Format
.如果您有映射,那么无需任何连接就应该很容易:
编辑: 阅读 Thomas Levesque 的答案后,我意识到这是行不通的,但以下应该:
If you have the mappings, it should be easy without any joins:
EDIT: After reading Thomas Levesque's answer, I realized this wouldn't work, but the following should: