“使用通用列表时,不要直接使用 - 在QueryOver表达式中使用”

时间:2015-09-24 08:33:30

标签: c# linq fluent-nhibernate

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

代码如下所示:

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表达式中使用

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

1 个答案:

答案 0 :(得分:1)

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

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