我有几个继承自基类的类
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))'
有什么方法可以添加扩展转换(或类似的东西)来实现这个功能吗?
或者我是否需要针对每个派生类多次提供完全相同的查询?
答案 0 :(得分:3)
您需要AsQueryable()
您的列表(下面的c#语法)
var ResultA = lista.AsQueryable().Where(expression);
如果需要,您可以将结果转换回原始类型
foreach (var x in ResultA)
{
Response.Write(((ClassA)x).Something);
}