我使用的EntityFramework從數據庫對象的列表,我使用匿名類型,最終返回正確的對象創建對象。因爲有幾個函數需要做這個'匿名類型轉換'我想提取這個函數。從匿名類型
我可以創建一個函數來創建一個動態的,而是因爲如果函數包含動態參數,返回類型是一個動態類型也不能創建轉換一個動態的在特定類型的函數。
這工作:
List<SomeObject> list = list
.Select(i => GetAnonymousType(i))
.Select(i => new SomeObject {Item1 = i.Item1, Item2 =i.Item2}).ToList();
這不:
List<SomeObject> list = list
.Select(i => GetAnonymousType(i))
.Select(i => CreateSomeObjectFromDynamic(i)).ToList();
private static SomeObject CreateSomeObjectFromDynamic(dynamic i)
{
return new SomeObject {Item1 = i.Item1, Item2 = i.Item2};
}
參見:https://dotnetfiddle.net/zLFlur
有沒有一種方法,我可以使用的功能,如:CreateSomeObjectFromDynamic返回正確的類型?
我想你已經問題遇到的問題是EF無法將'CreateSomeObjectFromDynamic'轉換爲SQL。據我所知,解決這個問題的唯一方法就是記憶。執行你的查詢,然後執行'CreateSomeObjectFromDynamic'方法。這樣,您需要定義一個選擇反正明顯的缺點.. :( – smoksnes
即使這是平移,以SQL中的問題是,你試圖從*編譯* - 時間,你在提供運行*。*這億韓元使用時間一點都不工作,你可以用反射來實現這個功能,但是你仍然不能獲得編譯時類型,因此你的'Select'永遠不會被強類型化 - 我懷疑它甚至是可能的(或者是否存在非一般的選擇?)。 – HimBromBeere
鑄造動態的一個對象的創建,然後使用反射一個新SomeObject的作品。我不知道我是否會去那個意志。我更好地複製代碼,以動態轉換爲SomeObject在需要它 –