簡體   English   中英

如何將多個 SQL 連接到 LINQ 查詢

[英]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();

筆記:

  1. 您可以僅在需要時將Id字段切換為字符串以進行比較。
  2. 將 _contextA 、 _contextB_contextC_contextD Table4為各自的真實上下文Table1Table2_contextATable3

我建議您添加 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM