我有這樣的事情在我的C#MVC控制器:實體框架的Core2 LINQ - 每個連接可以作爲獨立的查詢
from table1 in db.Table1.AsQueryable()
join table2 in db.Table2.AsQueryable() on table1.Col1 equals table2.Col1
join table3 in db.table3.AsQueryable() on new { table2.Col2, table2.Col5 } equals new { table3.Col2, table3.Col5 }
.
.
few more joins
.
.
WHERE ......
select new {table1.Prop1, table2.Prop2, table3.Prop3}
當我看着它運行在SQL事件探查器,我期待有一個查詢所有的連接。它所做的是,它在不同的查詢中選擇所有表中的所有列。即運行
SELECT * FROM Table2 --Instead of * it has all column names
當這樣運行完畢後,運行
SELECT * FROM Table3 --Instead of * it has all column names
等爲每個表。表格很大,因此需要很長時間才能使用很多內存。我在實體上添加了AsQueryable()
,但它沒有什麼區別,仍然是多個查詢。 db
是DbContext
,使用核心2.
如何更改LINQ或其他設置,使整個事件作爲單個查詢運行?
更新
它看起來像這個問題是由具有連接列上的一個Convert.ToInt32(
造成的。我加入的int
列在一個表中可以爲空,而在另一個表中不可以爲空,因此我可以在可空的 表上刪除Convert.ToInt32(
,刪除轉換生成的單個查詢。
那麼,你絕對不需要那些'AsQueryable'調用。你爲什麼要這樣做......在新的{table2.Col2,table2.Col2}等於new {table3.Col2,table3.Col2}'? –
@BradleyUffner我試圖看看他們是否會有所作爲,但他們沒有。 – curious
@BradleyUffner查看編輯,錯誤輸入了兩次相同的列名。 – curious