(轉)EF的Include 在.NET Framework 和.net core 中進行多個表查詢的時候不同的寫法


版權聲明:本文為博主原創文章,遵循 CC 4.0 by-sa 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/CAPF_sky/article/details/81263521

當存兩個以上的表存在一對多的qing情況下,如何根據第一個主表去查詢下面子表的多條數據?

具體問題如下

A,B,C 三個表 其中 A表為主表,而B表則是A表的子表,兩表的關系屬於一對多,這個時候我們需要從A表取出一條數據出來,並且連帶着B表的多條數據一起取出來,其實Linq 里面就幫我們寫好了一個方法,專門就是專門就是為了解決所遇到的這類問題,具體解決方案如下:

 .net framework 的解決方案:

    static void Main(string[] args)
    {
      using (var db = new Entities())
      {
       var model = db.A.Include(a => a.B).FirstOrDefault();
       }
    }

通過Linq的Include方法將B表里面的所有屬於A表中我們要查的那條數據的子數據給查詢出來。

如果這時候我們需要把B表里面所有數據的子數據再通過這個方式查出來的話,就需要用下面這種方式,因為B表里面一條數據可能對應多條C表里面的數據,所以當我們查詢C表的時候,是需要將所有B表數據的關聯數據給查出來的,所以不能像B表一樣去直接將C表給。出來,而需要通過Linq的select()方法,將我們B表所有的關聯數據都給查出來。

    static void Main(string[] args)
    {
      using (var db = new Entities())
      {
       var model = db.A.Include(a => a.B).Include(a=>a.B.Select(x=>x.C)).FirstOrDefault();
       }
    }

值得一提的是,Include其實有兩種寫法

    static void Main(string[] args)
    {
     //第一種
      using (var db = new Entities())
      {
        var data=(from a in db.A.Include("B")
                  select A
                 ).FirstorDefault();             
       }
     
     //第二種 需要引用命名空間
      using System.Data.Entity;
     
      using (var db = new Entities())
      {
       var data=db.A.Include(x=>x.B).FirstorDefault();
      }
    }

而在Include里面寫 蘭姆達表達式的話,是需要我們引用System.Data.Entity 這個 命名空間的。

    .netCore 解決方案

在DotNetCore中單個Include()的用法與之前.net framework的用其實是一樣的,但是主要就是查詢第三張表的用法,

在使用第二次Include()的時候,.NetCore其實提供了一個新的方法,ThenInclude()

    static void Main(string[] args)
    {
     
      using (var db = new Entities())
      {
       var data=db.A.Include(x=>x.B).ThenInclude(s=>s.C).FirstorDefault();
      }
    }

 

以上就是在.net framework與 DetNetCore 中 查詢一對多的數據查詢方法。

多謝觀看,如果可以請給我素質三連~~~

有錯您提出來,我改,寫得好,請給我鼓勵。

這里是個后端小白,需要您的鞭撻與鼓勵。

謝謝!
 ————————————————
版權聲明:本文為CSDN博主「多拉多拉曼」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/CAPF_sky/article/details/81263521


免責聲明!

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



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