这个带有 Join 的 Linq 查询如何写成 Lambda?

Posted

技术标签:

【中文标题】这个带有 Join 的 Linq 查询如何写成 Lambda?【英文标题】:How would this Linq query with Join be written as a Lambda? 【发布时间】:2014-09-15 09:45:55 【问题描述】:

我正在尝试学习如何将连接作为 lambdas 进行,我有这个 linq 查询,但无法弄清楚如何将其作为 lambdas 进行

From posts In db.be_Posts Join t In db.be_PostTag On posts.PostID 
Equals t.PostID Where t.Tag = tag Select posts.Title

上面的 Join 在 LinqPad 中工作。到目前为止,这就是我所拥有的 lambda。我也在尝试将所有内容都放入视图模型中。

db.be_Posts.OrderByDescending(Function(x) x.DateCreated).Join(db.be_PostTag, 
Function(p) p.PostID, Function(t) t.PostID, Function(p, t).Select(Function(p1) 
New be_PostsViewModel
With .Id = 

当我输入 p、p1 或 t 时,.Id 之后没有智能感知。我究竟做错了什么?谢谢

【问题讨论】:

【参考方案1】:

这部分看起来很奇怪(有意还是错字?):

....Function(p, t).Select(Function(p1)...

据我所知,这样的事情应该可以工作:

db.be_Posts.
    OrderByDescending(Function(x) x.DateCreated).
    Join(db.be_PostTag, _
            Function(p) p.PostID, _
            Function(t) t.PostID, _
            Function(p, t) New be_PostsViewModel With 
                            
                                .Id = p.PostID,
                                ....
                                ....
                            )

您的 LINQ 查询语法可以翻译成这样的方法语法:

db.be_Posts.
    Join(db.be_PostTag, _
            Function(p) p.PostID, _
            Function(t) t.PostID, _
            Function(p, t) p.Title)

【讨论】:

以上是关于这个带有 Join 的 Linq 查询如何写成 Lambda?的主要内容,如果未能解决你的问题,请参考以下文章

带有 WHERE 子句的 SQL INNER JOIN 到 LINQ 格式

Linq-to-Entities:带有 WHERE 子句和投影的 LEFT OUTER JOIN

如何将带有 LEFT JOIN 的 SQL 转换为 EF CORE 3 LINQ

实战 EF(LINQ) 如何以子查询的形式来 Join

LINQ Join 与 On 子句中的多个条件

如何将 Sql 查询转换为 Linq 及其在 Entity Framework Core 中的 Join() 方法的等价物