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函数