将sql JOIN语法更改为LINQ

时间:2011-12-03 16:04:26

标签: sql linq inner-join

有两个表:帖子和标签。另一个名为PostsTags的表同时具有Posts和Tags表的id。以下SQL查询的对应LINQ是什么。

SELECT *
FROM Posts
INNER JOIN Tags ON Posts.ID = Tags.ID

如何检索两个表的值

2 个答案:

答案 0 :(得分:1)

相应的LINQ将如下所示:

var posts = from p in context.Posts
            join t in context.Tags on p.ID equals t.ID
            select p;

然而,该查询没有多大意义,因为帖子ID和标签ID之间没有任何明确的连接。

如果我们谈论LINQ to SQL生成的上下文,那么你可以用这个检索所有的帖子和标签对:

var postsTags = from pt in context.PostsTags
                select new {Post = pt.Post, Tag = pt.Tags};

就像那样。如果两个表之间存在外键关系,LINQ将自行处理获取引用对象的所有工作。

但是,如果我们谈论其他LINQ(LINQ to Objects,LINQ to XML),那么这里是您需要的查询:

var postsTags = from pt in context.PostsTags
                join p in context.Posts on pt.PostID equals p.ID
                join t in context.Tags on pt.TagID equals t.ID
                select new {Post = p, Tag = t};

答案 1 :(得分:0)

如果您没有任何导航属性,并且想要加入Linq中的两个集合,您将得到:

var result = from p in Posts
            join t in Tags on p.ID equals t.ID
            select new { Post = p, Tag = t };