我正在通過實體框架從數據庫中檢索映射到實體類的一些元組。使用IQueryable.OrderBy作爲組合鍵而不加載所有項目?
對於這些實體,我有一個密鑰選擇器函數(由其他開發人員在運行時提供),我想傳遞給Queryable.OrderBy
。
public void RegisterEntity<TEntity, TKey>(string entityName, TKey defaultKey, Func<TEntity, TKey> keySelectorFunc)
我想物化之前執行此OrderBy
電話:其由一個外形大致這樣的方法來發生的那樣 - 鍵選擇功能在我的系統中的實體類型的「註冊」提供將結果映射到實體對象(即以使得OrderBy
調用仍然在底層被轉換爲SQL的方式)。
問題是實體具有複合鍵,因此,鍵選擇器函數將返回在該函數中實例化的自定義對象。你可以把它想象這樣的:
var keySelectorFunc = e => new CustomKey(e.Value1, e.Value2);
像往常一樣,實體框架不喜歡這個(通常「只有參數構造函數初始化,並在支持LINQ到實體」的錯誤)。
有沒有什麼辦法可以使用這樣的自定義按鍵選擇函數來返回自定義按鍵?我必須訴諸匿名課程嗎?或者我應該在離開LINQ-to-Entities世界之後將OrderBy
電話轉移到某個地方嗎?
此值(e.Value1和e.Value2)來自哪裏? –
對於組合鍵的每一列,您可以使用兩個子句。即使假設您可以通過自定義鍵提供排序,SQL服務器也不會同時在兩列上執行排序。 OrderBy和ThenBy應導致正確的SQL查詢,並且在將數據返回到代碼之前應在SQL服務器上執行排序。 –
@EdneyBatistadaSilva:它們是映射到數據庫列的實體的屬性。 –