[英]How to convert multiple SQL joins to LINQ query
我一直在研究一個問題一段時間,並設法提出了所需的 SQL 代碼。 我目前正在使用 .NET Core 2.0 並嘗試使用數據庫上下文在 LINQ 中編寫以下內容。
這是我迄今為止嘗試過的,但沒有運氣(我試圖讓一個最小的例子工作):
from s in _context.Table1
join f in _configContext.Table2 on s.Id.ToString() equals f.Id
select s;
要在 LINQ 中進行LEFT JOIN
,您需要DefaultIfEmpty()
。
所附代碼是按要求以 LINQ 方式執行LEFT JOIN
表的概念。
var result = (
from a in _contextA.Table1
join b in _contextB.Table2 on a.Id.ToString() equals b.Id into ab
from b in ab.DefaultIfEmpty()
join c in _contextC.Table3 on a.Id equals c.Id into ac
from c in ac.DefaultIfEmpty()
join d in _contextD.Table4 on a.Id equals d.Id into ad
from d in ad.DefaultIfEmpty()
select new { a.Id, Name = b.Name + " " + c.Name + " " + d.Name }
)
.ToList();
筆記:
Id
字段切換為字符串以進行比較。_contextB
、 _contextC
、 _contextD
Table4
為各自的真實上下文Table1
、 Table2
、 _contextA
、 Table3
。我建議您添加 nuget package linq2db 。 這個 package 是一個 LINQ 數據庫訪問庫,在創建 LINQ 查詢時為您提供了更多的靈活性。 使用 package 您可以按如下方式創建查詢:
using LinqToDb;
var query = from t1 in _context.Table1
from t2 in _context.Table2.LeftJoin(x => x.Id.ToString() == t1.Id.ToString())
from t3 in _context.Table3.LeftJoin(x => x.Id.ToString() == t1.Id.ToString())
from t4 in _context.Table3.LeftJoin(x => x.Id.ToString() == t1.Id.ToString())
select new
{
t1Id = t1.Id,
concatNames = $"{t2.Name}{t3.Name}{t4.Name}"
};
如您所見,它非常簡單。 如果您只需要更多 LINQ 方法,另一種選擇是 package morelinq 。 這個有更多的操作(據我所知),但我對它不太熟悉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.