【发布时间】:2011-12-15 11:44:26
【问题描述】:
这是我设法编写的查询:
select *
from [Transaction] as t left join (ProductTransaction as pt right join Product as p on pt.productId = p.productId) on t.transactionId = pt.transactionId
left join (ReservationTransaction as rt right join Reservations as r on rt.reservationId = r.reservationId) on t.transactionId = rt.transactionId
到目前为止,我已经得到了类似的东西(没有嵌套的右连接),但我被卡住了。谁能帮我处理这些子查询/嵌套连接?
from t in dataContext.Transactions
join pt in dataContext.ProductTransactions on t.transakcja_id equals pt.transactionId into pTransactions
from pt in pTransactions.DefaultIfEmpty()
join rt in dataContext.ReservationTransactions on t.transakcja_id equals rt.transactionId into rTransactions
from rt in rTransactions.DefaultIfEmpty()
编辑: 好的,谢谢你的提示。我想要做的是将~5 个相关的实体(它们与外键连接)组合到一个表中。情况是我需要所有交易,但并非每笔交易都与产品或预订相关联。所以我不确定我是否能够使用简单的关联属性和比一个更多的查询来获得所有这些,还是我?也许我应该使用多个查询并且有我的胸部问题?
我上传了我正在处理的实体方案的屏幕截图。提前感谢您的建议。 part of db scheme
【问题讨论】:
-
我可以告诉你的是,你最好用清晰的语言解释你的查询需要做什么,然后在 LINQ 中推理它,而不是尝试从 sql 中翻译它。 Joseph Albahari 在他的网站上解释了为什么尝试从 SQL 翻译是个坏主意。除此之外,如果这些表的 FK 设置正确,则无需加入任何内容,只需查询主表并浏览导航属性即可。
标签: c# .net sql tsql linq-to-sql