具有多个参数的Func表达式

use*_*670 2 c# nhibernate delegates expression func

我正在尝试编写一个表达式,该表达式调用一个接受多个参数作为输入的方法,并且该表达式充当nhibernate查询引擎的where子句.目前我收到一条错误消息:

System.Exception:无法识别的方法调用: System.Func`3[[MyClass, Assembly, Version=9.123.434, Culture=neutral, PublicKeyToken=null],[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=wjerkwr234],[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=234234123]]:Boolean Invoke(MyClass, Int32)

 Expression<Func<MyClass, int, bool>> restricton=
         (myClassObject, myNumber) => myClassObject.Property1== myNumber;

session
    .QueryOver<MyClass>()
    .Where(x =>x.Property2==1)
    .And(x=>restriction.Compile().Invoke(x, 2))
Run Code Online (Sandbox Code Playgroud)

我为什么要用表情?那么这是生成查询语句的函数的参数,并且条件可以改变

知道上面的代码有什么问题吗?

Fir*_*iro 6

linq提供程序需要一个Expression,但是你给它一个Delegate因为你使用了Compile().

int myNumber = 5;
Expression<Func<MyClass, bool>> restricton=
     myClassObject => myClassObject.Property1 == myNumber

session.QueryOver().Where(x => x.Property2 == 1).And(restriction)
Run Code Online (Sandbox Code Playgroud)

更新:如果仅在构造查询时才知道

session.QueryOver().Where(x => x.Property2 == 1).And(CreateRestriction(2))

Expression<Func<MyClass, bool>> CreateRestriction(int myNumber)
{
    return myClassObject => myClassObject.Property1 == myNumber;
}
Run Code Online (Sandbox Code Playgroud)