2012-03-06 80 views
2

我正在尝试编写一个表达式,该表达式调用接受多个参数作为输入的方法,并且此表达式充当nhibernate查询引擎的where子句。目前,我得到一个错误说:带有多个参数的Func上的表达式

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

为什么我使用的表达?那么这是一个生成queryover语句的函数的参数,其中的条件可以改变

任何想法上述代码有什么问题?

回答

6

linq提供程序需要一个表达式,但由于您使用Compile()而给它一个委托。

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

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

更新:如果构建查询

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

Expression<Func<MyClass, bool>> CreateRestriction(int myNumber) 
{ 
    return myClassObject => myClassObject.Property1 == myNumber; 
} 
+0

时FIRO问题仅仅知道的是,当我构建表达mynumber的不能设置,这就是为什么我有它作为第二放慢参数..什么是解决方案呢? – user917670 2012-03-06 10:56:27