這行代碼:反思的LINQ
db.Set<T>().Max(d => d.GetType().GetProperty("DateTimePropertyName").GetValue(d))
導致此異常:
LINQ to Entities does not recognize the method 'System.Object GetValue(System.Object)' method
我如何工作的呢?
這行代碼:反思的LINQ
db.Set<T>().Max(d => d.GetType().GetProperty("DateTimePropertyName").GetValue(d))
導致此異常:
LINQ to Entities does not recognize the method 'System.Object GetValue(System.Object)' method
我如何工作的呢?
默認情況下,它假設你通過Expression<Func<T,TResult>>
,但你需要的是通過Func<T,TResult>
:
Func<T, object> f = p => p.GetType().GetProperty("DateTimePropertyName").GetValue(p);
_context.Set<T>().Max(f);
它源於IEnumerable的,所以它會如果打性能你的桌子很大
它的工作原理,但正如你所說,它擊中了性能 – Mehrdad
您試圖運行c#代碼,它假設以某種方式被轉換爲SQL,但不能。
This是一個很好的開始。
你有兩種選擇:從DB
1.Fetch的數據,並通過它與LINQ到對象 - Probally最簡單的,而不是做的事情,因爲一些查詢可以返回大集合的最好方式。
2.試着找一個更好的方式來做你正在做的事情。你爲什麼要這個反射代碼運行?目的是什麼? DateTimePropertyName是否公開?如果是這樣,爲什否則,這樣的事情應該工作:
db.Set<T>().Max(d => d.DateTimePropertyName);
這是一個泛型類,我需要在服務器端完成它。 – Mehrdad
你應該刪除「== Something」,也許在1中給一些代碼。否則,很好的答案。 +1 –
@MarkusJohnsson - 你說的對..我做了==錯誤的東西:) –
我認爲它不會工作,因爲你正在查詢一個數據庫,它不會支持GetType()... –
計算是否執行在服務器端很重要?您基本上要求服務器計算LinqToEntities無法與服務器通信的內容。 – Tormod