我需要構建一個查詢來提供分頁結果。部分過濾發生在數據庫中,部分過濾發生在內存中的對象中。在linq中混合數據庫和對象查詢並提供分頁結果
下面是一個簡單的示例,顯示了我可以做什麼,即對數據庫運行linq查詢,然後使用自定義代碼對其進行進一步過濾,然後使用skip/take進行分頁,但這樣會非常低效,因爲它需要加載與我的查詢的第一部分匹配的所有項目。
Things.Where(e=>e.field1==1 && e.field2>1).ToList()
.Where(e=>Helper.MyFilter(e,param1,param2)).Skip(m*pageSize).Take(pageSize);
MyFilter函數使用不位於在數據庫中,它是與其他參數(paramX在上面的例子)
運行的附加數據是否有來處理這種情況,而無需加載初始的優選方式完全在記憶中。
您的第一個選項是不可能的,因爲MyFilter函數使用了一些不在數據庫中的附加信息。保存MyFilter的結果不可行,因爲Myfilter實際上有其他參數。我已經更新了相應的問題。 – cellik
如果您將MyFilter的結果保存在數據庫中,那麼它的計算方式並不重要,只是它是如此。但在實體更改時保存它,而不是在查詢數據庫時保存。 –
如果您在數據庫之外有需求,則無法在數據庫中分頁結果,因此必須在分頁之前將結果加載到內存中。 –