版權聲明:本文為博主原創文章,遵循 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