Во-первых, Вы должны заметить, использовать DISTINCT q.Id
, потому что это уже GROUP BY q.Id
.
SELECT q.Id
FROM Questions AS q
JOIN TagsQuestions AS tq ON q.Id = tq.QuestionForeignKey
JOIN Tags AS t ON t.Id = tq.TagForeignKey
WHERE t.Name IN ('C#', '.Net')
GROUP BY q.Id
HAVING COUNT(*) = 2
Во-вторых , Вы можете перейти с sql на синтаксис linq как ниже
var TagNames = new[] {
"C#",
".Net"
};
var result = from q in Questions
join tq in TagsQuestions on q.Id equals tq.QuestionForeignKey
join t in Tags on t.Id equals tq.TagForeignKey
where TagNames.Contains(t.Name)
group q by q.Id into g
where g.Count() = 2
select g.Key;