The LINQ expression 'Contains([x].ExamId)' could not be translated and will be evaluated locally.
今天看日誌的時候,看到一條這樣的警告,翻譯過來是Linq 表達式無法翻譯成sql,將在本地計算,就是因爲這個Contains方法,沒辦法解析成sql語句,將會跳過這個條件,將數據拉到內存,然後再執行這個操作。這是個很嚴重的問題,因爲數據量大的話,將會很吃內存,故想辦法處理。
我們一般會在兩種情況下用Contains方法,一個是是判斷字符串中是否存在某個片段,實現類似LIKE操作,另外就是判斷某一個值是否在某個集合中,類似IN操作。
對字符串操作很簡單,EF這個類提供了Contains和Like兩個方法,EF在using Microsoft.EntityFrameworkCore;名字空間下,用法如下:
對於第二種情況,願意是我直接把查詢這個集合的代碼寫在LINQ裏面,像下面這樣:
後來我單獨先取出來,然後Tolist(), 在放到這個位置,發現問題竟然解決了,鬱悶的是上面的examPage已經被拉到內存中,我只是單獨取出來一列。