背景
話說有這么一家子,老公養了一條狗,老婆養了一只貓。
數據庫的設計
人表
寵物表
通過表可以知道,寵物通過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
您的支持是我最大的動力,如果滿意,請幫我點擊推薦。