Vb.net NHibernate linq-将lambda函数作为参数传递给另一个lambda函数

Vb.net NHibernate linq-将lambda函数作为参数传递给另一个lambda函数,vb.net,linq,nhibernate,lambda,querying,Vb.net,Linq,Nhibernate,Lambda,Querying,这是我的密码: Public Class Person Public CountryId as Integer Public CityId as Integer End Class Public MustInherit Class BaseQuery Protected _IdsForFilter As Integer() = {1,2,3} Protected Function GetQuery(filter As Func(Of Person, Integer

这是我的密码:

Public Class Person
   Public CountryId as Integer
   Public CityId as Integer
End Class

Public MustInherit Class BaseQuery
    Protected _IdsForFilter As Integer() = {1,2,3}

    Protected Function GetQuery(filter As Func(Of Person, Integer)) As Expression(Of Func(Of Person, Boolean))
        Return Function(p) _IdsForFilter.Contains(filter(p))
    End Function
End Class

Public Class CountryQuery
    Inherits BaseQuery

    Public Function GetQueryResult() As IEnumerable(Of Person)
        Using session = NhHelper.OpenSession()
            Return session.Query(Of Person)().Where(GetQuery(Function(p) p.CountryId))
    End Using            
    End Function
End Class
如您所见,我希望将Person Functionp p.CountryId的字段选择器作为lambda函数传递,以便在BaseQuery中实现通用搜索。 问题是所有查询都会编译,但NHibernate不会为此查询返回任何结果。参数中发送的lambda函数似乎不是解释为lambda函数,而是作为委托的标识符

拜托,你知道这个问题吗? 换句话说,我应该建立一个表达式树,但我不知道如何做?
Thaks提前很多时间寻求帮助

在LinqKit库的帮助下,我终于解决了这个问题,我的函数GetQuery变成:

Protected Function GetQuery(filter As Func(Of Person, Integer)) As Expression(Of Func(Of Person, Boolean))
    Dim expr As As Expression(Of Func(Of Person, Boolean) = Function(p) _IdsForFilter.Contains(filter.Invoke(p))
    Return expr.Expand()
End Function
多亏了LinqKit,我的外表达式和内表达式结合在一起,外表达式给出了参数p,并将其传递给内lambda函数