如何在 nhibernate 的谓词查询中使用方法作为谓词

How to use method as predicate in the in Predicate Query in nhibernate

我在存储库中有一个方法,我在其中实施了一个方法,return 所有未结订单转移

 public async Task<IList<OrderShift>> GetAllOpenOrderShift()
        {
            return await GetAllAsync(a => a.Status == OrderShift.ShiftOpen).ConfigureAwait(false);
        }

我在实体中也有创建方法 喜欢

   public virtual bool IsOpen()
        {
            return Status == ShiftOpen;
        }

但是当我尝试在谓词中使用方法时,出现类似

的错误
InvalidOperationException: Unrecognised method call: App/Entity/OrderShift : Boolean IsOpen()

如何在那些回购方法中使用方法作为谓词。

最近我使用了工作正常但在谓词查询中实现多个条件的解决方案,我应该在实体中创建表达式还是我应该做什么?

  public async Task<OrderShift?> GetShiftByStartingUserId(long userId)
        {
            return await CurrentSession.QueryOver<OrderShift>()
     .Where(a => userId == a.StartedByUserId && a.Status == OrderShift.StatusOpen).SingleOrDefaultAsync();         
        }

提供者必须能够将表达式树转换为SQL;通常不支持用户定义的方法。

但是,您可以这样做:

class Repository
{
    public async Task<IList<OrderShift>> GetAllOpenOrderShift()
    {
        return await GetAllAsync(OrderShift.IsOpenExpression).ConfigureAwait(false);
    }
}

public class OrderShift()
{
    internal static Expression<Func<OrderShift, bool>> IsOpenExpression =>
        a => a.Status == ShiftOpen;

    public virtual bool IsOpen()
    {
        return IsOpenExpression.Compile()(this);
    }
}