我写了一个查询:
from order in session.Query<ORM.Entities.Order>()
where order.Finishable()
select order);
其中Finishable是一个包含一些返回bool的业务逻辑的方法。
Nhibernate返回System.NotSupportedException:Boolean Finishable()异常。
Finishable()中的逻辑有点复杂。所以我的问题是:
那么什么是最佳解决方案?
答案 0 :(得分:1)
您编写的任何实际命名函数都将由编译器编译,因此LINQ查询提供程序无法使用它。
您需要创建一个代表您所拥有的操作的Expression
。
您几乎肯定希望使用lambda来创建该表达式,但您不一定需要始终内联这些lambda,这是典型的。您可以创建一个方法/属性/字段,用于存储要向更大范围公开的表达式:
public class Order
{
//consider renaming as appropriate
public static Expression<Func<Order, bool>> Finishable
{
get
{
//TODO change logic in lambda as needed
return order => order.Status == "Finished";
}
}
}
然后你可以写:
var query = session.Query<ORM.Entities.Order>()
.Where(ORM.Entities.Order.Finishable);