基本クラスから継承するクラスがいくつかあります
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))'
これを機能させるために拡大変換(または同様のもの)を追加する方法はありますか?
または、各派生クラスに対してまったく同じクエリを複数回提供する必要がありますか?