我有幾個類從基類繼承和多態
Public MustInherit Class BaseClass
Public Property Name as String
End Class
Public MustInherit Class ClassA
Inherits BaseClass
Public Property Something As String
End Class
Public MustInherit Class ClassB
Inherits BaseClass
Public Property SomethingElse As String
End Class
我希望能夠使用單個表達式查詢對象的多個列表,所有這些都繼承繼承從同一個基類
Public Function DoStuff(Expression as System.Linq.Expressions.Expression(Of Func(Of BaseClass, Boolean)))
Dim ListA As New List(Of ClassA) ''Populating this elsewhere
Dim ListB As New List(Of ClassB) ''and this
Dim ResultSetA = ListA.Where(Expression) ''Problems on this line
Dim ResultSetB = ListA.Where(Expression) ''and this
End Function
由於兩個ClassA
,並從同一個基類繼承ClassB
,由於LINQ查詢是針對基類,它應該工作。該Expression
只能參考該保證是存在於兩個派生類的基類的屬性,但我得到以下編譯時輸入錯誤:
Value of type 'System.Linq.Expressions.Expression(Of System.Func(Of BaseClass, Boolean))' cannot be converted to 'System.Linq.Expressions.Expression(Of System.Func(Of ClassA, Boolean))'
有什麼辦法,我可以添加一個擴大轉換(或類似的東西),讓這個工作?
或者我需要提供完全相同的查詢多次針對每個派生類?
原來的類型,我認爲你需要的LINQ的演員之前的地方是,但是我不知道VB的語法。我猜它可能是.Cast(Of BaseClass)? –
podiluska
你是不是要傳遞'Func'而不是'Expression'? – Henry
@HenryP其實,沒有。我已經簡化了上面的例子,因爲我實際上是針對Db中的實體運行的,列表是存儲庫,並且我還有其他一些動態修改表達式樹的事情。所討論的Baseclass是一個通用的'Job'基礎,代表作業的所有實體都繼承自 – Basic