如何使用扩展在Linq Lambda中编写此SQL

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用扩展在Linq Lambda中编写此SQL相关的知识,希望对你有一定的参考价值。

我一直在尝试将我拥有的SQL转换为lambda表达式。但是我现在花了太多时间试图解决它,希望也许你们可以解释一下我的解决方案。

SELECT *
FROM Products
INNER JOIN Details on Products.ID = Details.ID
INNER JOIN Orders ON Details.ID = Orders.ID

尝试:

db.Products.Include(x => x.Details)
           .Include("Details.Orders");

试图使用Join方法无济于事。它需要作为Iqueryable返回。我认为使用include会简化连接过程,但它似乎更复杂。无论我使用Include包含哪些表,似乎都无法获得Orders

答案

如果您使用EF,您可以这样做:

db.Products.Include(x => x.Details)
           .Include(x => x.Details.Orders);

否则,使用LINQ to SQL,您可以将SQL翻译为:

from p in db.Products
join d in db.Details on p.ID equals d.ID
join o in db.Orders on d.ID equals o.ID
select new { p, d, o};

转换为lambda语法为:

db.Products.Join(db.Details, p => p.ID, d => d.ID, (p,d) => new { p, d })
           .Join(db.Orders, d => d.ID, o => o.ID, (pd, o) => new { pd.p, pd.d, o });

以上是关于如何使用扩展在Linq Lambda中编写此SQL的主要内容,如果未能解决你的问题,请参考以下文章

如何为 sql 编写 lambda (linq) 表达式?

如何使用实体框架和 linq 编写此 sql 查询

如何编写此 LINQ 查询的 SQL 版本?

编写高质量代码改善C#程序的157个建议——建议27:在查询中使用Lambda表达式

如何在 LINQ 和 Lambda 表达式 LINQ C# 上正确执行 SQL 查询

将 lambda 表达式转换为 ORM 中的 SQL?