EFcore2.2 某些where會導致EF把資料全查出來再記憶體中過濾分頁
阿新 • • 發佈:2021-06-29
今天碰到一個奇怪問題,IQueryable物件拼接了某些where後,監控生成的sql裡並不帶任何where條件,導致資料全查出來再記憶體中過濾以及分頁,查詢時間非常慢。
具體where是這樣的
Where(o => (o.StartTime - now).TotalSeconds <= 60 * 60 * 24)
這個EF沒法轉換成sql,所以導致全查出來再記憶體中過濾
改成這樣就可以
Where(o => now.AddHours(24) > o.StartTime)
另外一些orderby 欄位,如果不是資料庫欄位,而是計算欄位,也會導致全查,然後再記憶體分頁,例如你再實體中定義了這個計算屬性, 用這個屬性做排序會導致全查再記憶體中分頁
public int InactiveSort { get { switch (Status) { case ShiftStatus.CheckedOut: return 10; default: return 20; } } }