2016-08-19 70 views
0

場景:我有一個使用延遲加載的實體框架實體的集合,因此爲DynamicProxies。然後有一個方法將一些選定的項目傳遞給覆蓋,我寫爲object。我需要將List<DynamicProxies.EntityABCD>(實際上傳遞爲object)轉換爲List<Entity>C#和實體框架 - Casting對象是List <DynamicProxies ...>到列表<Entity>

然而鑄造名單這樣

dropInfo.Data as List<MyEntity> 

將返回null。我甚至不能使用通用方法Cast<T>,因爲源列表再次以object的形式傳遞。

我也試過

dropInfo.Data as List<object> 

,但它仍然會返回null。

在此先感謝

編輯:設法與

((IList)dropInfo.Data).Cast<MyEntity>() 

清潔列表不過,我仍然需要檢查錯誤等

+0

你打算怎麼處理那個'List'?不能有一些協變的界面(如'IEnumerable ','IReadOnlyList ')爲你工作? –

+0

現在我明白了你的問題。在將它傳遞給dragInfo之前,是否可以將'List ''轉換爲'列表'?我懷疑你必須以某種方式存儲dragInfo(你的List),所以當你拖放時它可以在'dropInfo.Data'中傳回,所以你可以在之前進行轉換。 – Alisson

回答

1

您可以使用動態量詞此,如果你知道你的對象結構:

var result = ((List<dynamic>)dropInfo.Data).Select(ConvertToMyEntityMethod).ToList(); 

public static MyEntity ConvertToMyEntity(dynamic obj) 
{ 
    return new MyEntity(){ SomeIntProperty = (int)obj.SomeIntProperty }; 
} 

Dynamic允許您通過反射訪問類成員,而無需編譯錯誤。這對於性能來說確實是一個糟糕的解決方案,但是如果使用MVVM綁定,這將非常好。

+0

雖然這看起來像是符合我的情況的東西,但不幸的是,鑄造到列表將無法​​正常工作,但由於某些原因,將其轉換爲非通用列表將會生效。 –