[英]Linq to Sql multiple outer joins
在此先感謝您的幫助。 無論如何都不是 Linq to Sql 的專家。 我有4張桌子。
毫不奇怪,主 lb_item 表定義了一個項目。 許多字段但包含 3 個 ID 字段。 itemID (key) categoryID (not null) patternID (可以為null)
lb_pattern 表,其鍵控了 lb_item 模式 ID。
lb_category 表,其鍵控了 lb_item categoryID。
lb_animal 表,其鍵控了 lb_item 項目 ID。
所以我需要從 lb_item 表中選擇一個連接到這些其他 3 個表的選擇,以便在我構建 DTO 時帶回 varchar 字段。
因此,單個左外連接工作正常:
from lbi in lbContext.lb_item
join lbp in lbContext.lb_pattern on lbi.patternID equals lbp.patternID into g1
from j1 in g1.DefaultIfEmpty()
join lbc in lbContext.lb_category on lbi.categoryID equals lbc.categoryID
where lbi.itemID == id
select new lb_itemDTO..........
我現在需要為 lb_animal 表添加第二個左外連接。 所以我開始這樣做:
from lbi in lbContext.lb_item
join lbp in lbContext.lb_pattern on lbi.patternID equals lbp.patternID into g1
from j1 in g1.DefaultIfEmpty()
join lba in lbContext.lb_animal on j1.
但是 VS 中 j1 的選項只給我 lb_pattern 表中的字段。 我需要加入閱讀:
join lba in lbContext.lb_animal on j1.itemID equals lba.itemID
或者
join lba in lbContext.lb_animal on lbi.itemID equals lba.itemID
兩者都不起作用,並給我一個“'NavigationExpandingExpressionVisitor'失敗的異常。這可能表明EF Core中存在錯誤或限制”。
那么如何向 lb_animal 表添加左外連接呢?
我花了最后一個小時查看各種 SO 帖子以解決問題,但由於某種原因,我似乎無法理解解決方案。 感覺像個新手。 我相信解決方案將是顯而易見的!
任何幫助或指向解決方案的指針將不勝感激。
堅持不懈,終於遇到了一個 SO 帖子,該帖子以不同的方式接近它並且它起作用了。 原始 SO 在這里:
我的工作代碼現在是這樣的:
from lbi in lbContext.lb_item
from lbc in lbContext.lb_category
.Where(c => c.categoryID == lbi.categoryID)
from lbp in lbContext.lb_pattern
.Where(p => p.patternID == lbi.patternID)
.DefaultIfEmpty()
from lba in lbContext.lb_animal
.Where(a => a.itemID == lbi.itemID)
.DefaultIfEmpty()
where lbi.itemID == id
select new lb_itemDTO
仍然會對對此解決方案的評論感興趣,因為它不會將外部連接分解為分組段。 那么,與我最初提出的解決方案相比,我發現這個解決方案在生成的 SQL 方面效率低下嗎?
這應該有效:
var ans = from lbi in lbContext.lb_item
where lbi.itemID == id
join lbp in lbContext.lb_pattern on lbi.patternID equals lbp.patternID into lbpj
from lbp in lbpj.DefaultIfEmpty()
join lba in lbContext.lb_animal on lbi.itemID equals lba.itemID into lbaj
from lba in lbaj.DefaultIfEmpty()
join lbc in lbContext.lb_category on lbi.categoryID equals lbc.categoryID
select new {
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.