0
我試圖重構當前的過濾解決方案。 我有3類:通用Iqueryable過濾器
class A : C { }
class B : C { }
class C { }
和有一個允許通用參數的方法:
private static IQueryable<T> ApplyFilter<T>(IQueryable query, Filter filter)
{
IQueryable<C> qq = query.Cast<C>();
if(q == null)
throw new Exception("can not cast");
// applying filter
return (IQueryable<T>) q;
}
最後一行(返程)拋出異常:「無法投型的對象「系統。 Data.Entity.Infrastructure.DbQuery 1[C]' to type 'System.Linq.IQueryable
1 [A]'。「
有誰知道如何解決它? 在此先感謝
您是否嘗試過使用'的IQueryable QQ = Query.Cast ();'而不是硬編碼爲'C'?注意:雖然'IQueryable '可以被分配給'IQueryable '(通過方差),但是'IQueryable '可以被分配給'IQueryable '(除非底層類型真的是一個) –
2014-09-01 08:51:48
我沒有嘗試將它轉換爲T,因爲它已經是T型。 「IQueryable可以被分配到IQueryable 」,是否有其他方法可以使用這種轉換來完成那個過濾器?我讀過關於Expression的內容,這可能會有所幫助,但需要更多時間來實現。 –
Daemon025
2014-09-01 09:34:23
在問題中,它不是「T型」;它是非通用API。這是不是很清楚你在這裏做什麼。你有一個來電者的例子嗎? – 2014-09-01 09:36:32