【问题标题】:Nhibernate .class equivalent in QueryOverQueryOver 中的 Nhibernate .class 等效项
【发布时间】:2012-07-16 00:31:28
【问题描述】:

以下是特定类型类的 HQL 查询

select a from Animal a
where TYPE(a) in ('Cat', 'Dog')
and a.sex = 'Male'
order by a.name


select a from Animal a
where a.class in ('Cat', 'Dog')
and a.sex = 'Male'
order by a.name

我想知道是否有使用 QueryOver 的等价物?

【问题讨论】:

  • 也许有,但与此同时你可以随时.Where(Projections.eq("class", ...)

标签: nhibernate nhibernate-mapping hql queryover


【解决方案1】:

您可以使用GetTypeIsIn QueryOver 扩展方法来完成此操作:

session.QueryOver<Animal>()
    .Where(a => a.GetType().IsIn(new[] { "Cat", "Dog" })
    /* .. etc */

您应该使用您的 NHibernate 映射使用的鉴别器值。

【讨论】:

  • 它不起作用顺便说一句我想这样做的原因是因为我想解决这个线程stackoverflow.com/questions/11491592/…中陈述的问题
  • 你能扩展一下“它没有用吗?”生成的 SQL 是什么样的?你收到错误了吗?
  • 很抱歉,基本上我在 QueryOver 中加入了 TType1 到 TType2 是它无法执行查询无法解析正在加入的类型。
  • 我的查询类似于 session.QueryOver().JoinAlias(x=> x.propertyoftypeTType2,...).Where(x=> x.propertyoftypeTType2.GetType().IsIn (..)
  • 这可行,但请注意IsIn 数组必须与数据库中的鉴别器值的类型相同。如果鉴别器是字符串,那么数组必须是字符串。如果判别器是 int,则数组必须是 int。
猜你喜欢
  • 2011-11-25
  • 2011-09-30
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多