簡體   English   中英

在Func上具有多個參數的表達式

[英]Expression on Func with multiple parameters

我正在嘗試編寫一個表達式,該表達式調用一個接受多個參數作為輸入的方法,並且該表達式充當nhibernate queryover引擎的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))

我為什么要使用表情? 好吧,這是生成queryover語句的函數的參數,並且那里的條件可以改變

知道上面的代碼有什么問題嗎?

linq提供程序需要一個Expression,但是您可以使用Compile()給它一個Delegate。

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM