C# LINQ结果表1:*关系表-ASP.NET

C# LINQ结果表1:*关系表-ASP.NET,c#,sql,linq,entity-framework,one-to-many,C#,Sql,Linq,Entity Framework,One To Many,我正在尝试运行LINQ查询。我有两个具有多对多关系的表,我通过在它们之间引入另一个表来将它们分解为一对多关系,并保持两个表的主键以确保3个正常形式。现在我有asp.net中两个表的映射类,但不在表之间。。。我在上一篇博客中被建议,如果我理解正确,我不需要在表之间映射,也不需要在dbContext--DbSet中添加它 我想要LINQ查询,从表-Y中获取所有记录,其中表-X ID(PK)==2。。。我知道这可以在sql查询中完成,但在LINQ中却很困难 非常感谢你提前 假设表-X包含立柱,表-Y

我正在尝试运行LINQ查询。我有两个具有多对多关系的表,我通过在它们之间引入另一个表来将它们分解为一对多关系,并保持两个表的主键以确保3个正常形式。现在我有asp.net中两个表的映射类,但不在表之间。。。我在上一篇博客中被建议,如果我理解正确,我不需要在表之间映射,也不需要在dbContext--DbSet中添加它

我想要LINQ查询,从表-Y中获取所有记录,其中表-X ID(PK)==2。。。我知道这可以在sql查询中完成,但在LINQ中却很困难

非常感谢你提前


假设表-X包含立柱,表-Y包含标签:

public class Post
{
    public int Id { get; set; }
    public string Title { get; set; }
    public virtual ICollection<Tag> Tags { get; set; }
}

public class Tag
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Post> Posts { get; set; }
}
生成的SQL查询如下所示

SELECT
    [Extent1].[Id] AS [Id],
    [Extent1].[Title] AS [Title]
    FROM [dbo].[Posts] AS [Extent1]
    WHERE  EXISTS (SELECT
        1 AS [C1]
        FROM [dbo].[TagPosts] AS [Extent2]
        WHERE ([Extent1].[Id] = [Extent2].[Post_Id]) AND 
              (2 = [Extent2].[Tag_Id])
    )

正如您所看到的,EF足够聪明,可以检查连接表中的ID。

请添加您的实体的详细信息,并查询您尝试过的实体。如果您首先使用EF代码,您应该能够使用
TableY.TableXs
作为导航属性,而无需在您这边配置任何内容。您可以在这里阅读更多内容:(在文章的底部)in Entity Framework相信(我的理解!)连接表是TagPosts,而实际上是PostTagMap@如果您愿意,您可以指定连接表名称,这不是问题
SELECT
    [Extent1].[Id] AS [Id],
    [Extent1].[Title] AS [Title]
    FROM [dbo].[Posts] AS [Extent1]
    WHERE  EXISTS (SELECT
        1 AS [C1]
        FROM [dbo].[TagPosts] AS [Extent2]
        WHERE ([Extent1].[Id] = [Extent2].[Post_Id]) AND 
              (2 = [Extent2].[Tag_Id])
    )