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

C# 如何使用扩展在Linq Lambda中编写此SQL,c#,linq,lambda,C#,Linq,Lambda,我一直在尝试将这个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.O

我一直在尝试将这个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
中包含哪些表,似乎都不可能获得
订单

如果您使用EF,您只需执行以下操作:

db.Products.Include(x => x.Details)
           .Include(x => x.Details.Orders);
否则,使用LINQ转换为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 });

这就是我最初希望做的。然而,细节并没有包含订单的定义,即使它们在database@Jeremy你需要修复你的模型,但我认为它会起作用,因为该模型是从数据库中生成的。在列名方面需要一些帮助,以实现外键关系。我发现你有Products.ID==Details.ID==Orders.ID(例如,1:1:1关系)很奇怪。你能为我链接一些资源来帮助EF处理关系吗