具有多个参数的Func上的表达式
本文关键字:Func 表达式 参数 | 更新日期: 2023-09-27 18:26:45
我正试图编写一个表达式,该表达式调用一个接受多个参数作为输入的方法,该表达式充当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提供程序需要一个表达式,但由于使用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;
}