不能直接使用-在QueryOver表达式中使用使用泛型列表时

本文关键字:泛型 表达式 列表 不能 QueryOver | 更新日期: 2023-09-27 18:14:31

我试图实现的是基于一些附加参数的搜索查询修改。我有一份产品的上限清单。如果为产品设置了限制参数,则应将其作为上限。如果没有设置,它将使用产品当前值作为上限(因此它总是通过)。

代码如下:

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

地点:

  • _limits是产品限制的通用列表,取自数据库视图
  • SearchItems是一个包含产品的视图,也是取自数据库视图

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

我不确定我是否完全理解这个问题,但是……我的问题是:如何将nHibernate类(如投影)指向存储在CustomObjects的通用列表中的某个地方的值?

不能直接使用-在QueryOver表达式中使用使用泛型列表时

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

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