EF Core中Join可以進行子查詢

2022-02-06 12:46:56 字數 1536 閱讀 9007

我們來看看下面的**,這個**是乙個inner join的ef core查詢,其中用subcategory表inner join了subcategorylanguage表,但是我們需要在subcategorylanguage表上只查詢出其datastatus等於1的行,所以需要用到子查詢:

var count = dbcontext.subcategory.where(e => e.categorycode == "

0e3b0d17-516e-489e-9df3-3ecda10d14eb

" && e.datastatus == 1

).join(dbcontext.subcategorylanguage.where(e => e.datastatus == 1

), sc => sc.subcategorycode, sl => sl.subcategorycode, (sc, sl) => new

).count(s => s.subcategoryname == "

category001

" && s.languagecode == "

cn");

如上面**黃色高亮所示,我們在subcategorylanguage表的查詢中加上了datastatus == 1的查詢條件,執行該**使用ef core的後台日誌我們可以看到生成的sql如下:

******************************= ef core log started ******************************=

executed dbcommand (176ms) [parameters=, commandtype='text', commandtimeout='0']

select count(*)

from [md].[subcategory] as [e]

inner join (

select [e0].*

from [md].[subcategorylanguage] as [e0]

where [e0].[datastatus] = 1

) as [t] on [e].[subcategorycode] = [t].[subcategorycode]

where (([e].[categorycode] = n'0e3b0d17-516e-489e-9df3-3ecda10d14eb') and ([e].[datastatus] = 1)) and (([t].[subcategoryname] = n'category001') and ([t].[languagecode] = n'cn'))

******************************= ef core log finished ******************************=

我們可以看到在生成的sql中,inner join在subcategorylanguage表上使用了子查詢,在黃色高亮部分我們還可以看到其加上了where條件[datastatus] = 1。所以在ef core中使用join的時候,是可以使用子查詢來限制join表的查詢條件的。

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

話說有這麼一家子,老公養了一條狗,老婆養了乙隻貓。人表 寵物表 通過表可以知道,寵物通過owner指向主人的id。問題來了,我要和故事開頭一樣,老公 狗,老婆 貓,對應起來,怎麼查詢呢?有同學說這還不簡單?兩個遍歷一下不就行了。首先 取出 list 寵物 集合,再根據寵物的主人id去查詢對應的主人資...

python對流進行join

對流的合併,有時各個流的進度需要根據資料的不同而定。def joinstreams instreams,getnext lambda data,livings livings 把各流進行關聯,instreams是流陣列,getnext函式決定從哪些流中取下一批資料,輸入引數為流編號,輸出應為需要從哪...

CakePHP 使用JOIN進行多表聯合查詢

在 select,update 和 delete 語句中可以使用 join 來進行多表聯合查詢,join按照功能分為以下三類 例如有以下三張資料表,它們之間沒有關聯關係,但都有city code字段 現需要從三張資料表中聯合查詢,原始sql語句如下 select a.city name,b.city...