C# 如何将SQL查询转换为LINQ

C# 如何将SQL查询转换为LINQ,c#,sql,linq,C#,Sql,Linq,如何将SQL查询转换为LINQ SELECT DISTINCT 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

SELECT DISTINCT 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

首先,您应该注意使用
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;

首先,您应该注意使用
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;