1. 程式人生 > 其它 >EFcore2.2 某些where會導致EF把資料全查出來再記憶體中過濾分頁

EFcore2.2 某些where會導致EF把資料全查出來再記憶體中過濾分頁

今天碰到一個奇怪問題,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;
                }
            }
        }