利用EF Core的Join進行多表查詢


背景

話說有這么一家子,老公養了一條狗,老婆養了一只貓。

數據庫的設計

人表

 

寵物表

 

 

通過表可以知道,寵物通過Owner指向主人的Id。

 

問題來了,我要和故事開頭一樣,老公-狗,老婆-貓,對應起來,怎么查詢呢?

有同學說這還不簡單?兩個遍歷一下不就行了。

首先 取出 List<寵物>集合,再根據寵物的主人Id去查找對應的主人信息就好了。

如果這樣設計,那么將會執行3次查詢:

l  查出所有的寵物。

l  查出阿貓的主人。

l  查出阿狗的主人。

數據量不大還好,數據量要是大一點這是非常影響速度的。這時,我們可以用到EF Core所有的Join方法進行多表查詢。

 

我的做法是定義了一個PetsDetails的類,其代碼如下:

  public class PetsDetails
    {
        /// <summary>
        /// 寵物名稱
        /// </summary>
        public string PetName { get; set; }
        /// <summary>
        /// 主人名稱
        /// </summary>
        public string OwnerName { get; set; }
    }

用EF 的Join方法進行多表查詢:

        [HttpGet]
        public List<PetsDetails> Get() { return _context.Pets.Join(_context.Persons,pet=>pet.Owner,per=>per.Id,(pet,per)=>new PetsDetails { PetName = pet.Name, OwnerName = per.Name }).ToList(); }

執行結果如圖:

成功取到了寵物對應的主人的名稱。

好處

原本需要進行3次查詢的,用了Join方法后一次查詢即可取到所需要的結果。我們看看這條Sql語句的樣子:

我們看到其實這個需求是EF通過再sql語句中執行INNER JOIN實現的。

完整項目代碼:

https://github.com/liuzhenyulive/EF-CORE-JOIN-Demo

您的支持是我最大的動力,如果滿意,請幫我點擊推薦。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM