我目前正在大量使用實體框架的大型項目中工作。我們實現的部分功能是基於用戶提供的過濾器對各種數據模型進行動態查詢(過濾/排序)。System.Linq.Dynamic,EntitySQL和表達式樹之間的區別
爲了實現這一點,我結束了使用System.Linq.Dynamic
,讓我,通過各種手段,創建基於字符串的過濾器似樣"SomeProperty.StartsWith(@P0)"
等,再通過這些字符串(以及隨之而來的參數),以動態的LINQ擴展方法IQueryable<T>
(Where
等),以便它們對數據庫執行並且每個人都很高興。
我不知道任何其他方式做到這一點的時候,除了爲Expression Trees一個模糊的概念 和說實話,我只是不能讓我的 他們周圍的頭 - 我花了幾個星期的鑽研組件的反編譯所使用表達式來實現動態查詢和我猶豫:)
加上它覺得我是重塑當我有效所需的功能遠遠聰明人比我已經寫輪,在
System.Linq.Dynamic
擴展。
現在當前代碼的所有作品非常好,作爲濾波廣義解,排序等,對我的任何實體,我用它足夠的幸福不過是我變得越來越熟悉,我EF開始遇到類似的事情
,我開始懷疑,因爲System.Linq.Dynamic
是近6歲,並沒有真正有什麼用它做在那個時候,我我上遺漏了呢?或我有沒有想過一些基本點?
我應該硬着頭皮搬過來我的代碼庫使用
EntitySQL
? (我認爲這就像System.Linq.Dynamic
的精神繼承者,或者我錯了嗎?)或者我應該回去學習如何使用
Expression Trees
因爲他們是未來的方式/所有的酷孩子都這樣做,等等?我不喜歡爲改變而改變,我喜歡可以運行的代碼,但我擔心未來的某些時候,基於字符串的動態linq會成爲一個死衚衕,我堅持使用它。
如果有人可以幫助System.Linq.Dynamic
和EntitySQL
之間明確的差異,或者可以識別移動到Expression Trees
我會很感激任何好的理由。
感謝您的見解。我們希望升級到EF6,所以我想我需要仔細看看Entity SQL。 –
你是如何着手讓EF6緩存使用編譯表達式樹生成的查詢的? –