"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)
)
);
其中:
- _limits 是从数据库视图中获取的产品限制的通用列表
- SearchItems 是包含产品的视图,也是从数据库视图中获取的
当我启动它时它抛出一个异常:不能直接使用 - 在 QueryOver 表达式中使用。
我不确定我是否完全理解这个问题,但是...
我的问题是:如何将 nHibernate 类 像投影一样指向存储在通用 CustomObjects 列表中某处的值?
Projections.Property
期望在 lambda 表达式中选择 属性,例如 p => p.SomeNumberValue
.
当 _limits
来自一个视图时,您可能应该在查询中加入该视图。列表作为查询中的参数无论如何都可能是个问题,因为项目作为单独的参数传递到数据库,并且参数的数量有限制。
我想要实现的是基于一些附加参数的搜索查询修改。我有一个产品上限列表。如果为产品设置了限制参数,则应将其用作上限。如果未设置,它将使用产品当前值作为上限(以便它始终通过)。
代码如下所示:
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 列表中某处的值?
Projections.Property
期望在 lambda 表达式中选择 属性,例如 p => p.SomeNumberValue
.
当 _limits
来自一个视图时,您可能应该在查询中加入该视图。列表作为查询中的参数无论如何都可能是个问题,因为项目作为单独的参数传递到数据库,并且参数的数量有限制。