2012-03-06 77 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