这个Linq查询的lambda等价物是什么?

时间:2011-11-24 02:30:44

标签: linq lambda

此linq查询的等效lambda语法是什么?

Dim query = From t In _rdsqlconn.Tags Where t.TagWord = tag 
   Join p In _rdsqlconn.Posts On t.PostId Equals p.PostId Order By p.PostDatePublished 
   Descending Select p Where p.PostIsPublished = True

1 个答案:

答案 0 :(得分:2)

您可以使用连接执行此操作,如下所示:

_rdsqlconn.Tags
    .Where(t => t.TagWord == tag)
    .Join(_rdsqlconn.Posts, t => t.PostId, p => p.PostId, (t, p) => p)
    .Where(p => p.PostIsPublished == true)
    .OrderByDescending(p => p.PostDatePublished)

想要做的是在LINQ-to-SQL设计器中正确映射表和关系,然后你可以使用

_rdsqlconn.Posts.Where(p => p.PostIsPublished && p.Tags.Any(t => t.TagWord == tag))
    .OrderByDescending(p => p.PostDatePublished)

如果您的数据库中的帖子和标签之间有外键,那么您将能够执行此操作。这是更清晰的代码,并删除不必要的Join运算符。