1

基本クラスから継承するクラスがいくつかあります

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))'

これを機能させるために拡大変換(または同様のもの)を追加する方法はありますか?

または、各派生クラスに対してまったく同じクエリを複数回提供する必要がありますか?

4

1 に答える 1

3

あなたのリストが必要ですAsQueryable()(以下のC#構文)

var ResultA = lista.AsQueryable().Where(expression);

必要に応じて、結果を元の型にキャストできます。

 foreach (var x in ResultA)
 {
      Response.Write(((ClassA)x).Something);
 }
于 2012-06-29T12:17:53.320 に答える