"Not to be used directly - use inside QueryOver expression" 使用通用列表时

"Not to be used directly - use inside QueryOver expression" when using a generic list

我想要实现的是基于一些附加参数的搜索查询修改。我有一个产品上限列表。如果为产品设置了限制参数,则应将其用作上限。如果未设置,它将使用产品当前值作为上限(以便它始终通过)。

代码如下所示:

subquery.WhereRestrictionOn(p => p.SomeNumberValue).IsNotNull().IsBetween(0).And(
  Projections.Conditional(
    Restrictions.On(() => alias.ProductId).IsIn(_limits),
    Projections.Property<SearchItems>(x => _limits.Where(y => y.ProductID == x.ProductId).FirstOrDefault().NewUpperLimit),
    Projections.Property<SearchItems>(p => p.SomeNumberValue)
  )
);

其中:

当我启动它时它抛出一个异常:不能直接使用 - 在 QueryOver 表达式中使用

我不确定我是否完全理解这个问题,但是... 我的问题是:如何将 nHibernate 类 像投影一样指向存储在通用 CustomObjects 列表中某处的值?

Projections.Property 期望在 lambda 表达式中选择 属性,例如 p => p.SomeNumberValue.

_limits 来自一个视图时,您可能应该在查询中加入该视图。列表作为查询中的参数无论如何都可能是个问题,因为项目作为单独的参数传递到数据库,并且参数的数量有限制。