1

我正在尝试将以下 SQL 查询转换为 NHibernate 中的 ICriteria。

SELECT DISTINCT m.typeId, t.typeName
FROM Models m, Types t
WHERE m.qualifier=? AND m.typeId IS NOT NULL AND m.typeId = t.typeId

它们都在 NHibernate 中映射到称为 Models 和 ModelType 的类中。ICriteria.List 应返回 ModelType 类型的列表。

谢谢

4

1 回答 1

1

有好消息也有坏消息。您可以创建一个返回模型类型列表的条件。但是,它们不会被会话管理。原因是,一个不同的查询只能返回一个投影,而投影总是不受管理的。

下面的查询将生成与上面类似的查询,因为它在两个实体之间进行内部连接,并基于这 2 列返回一个不同的集合。结果转换器应设置为生成可以通过属性设置的某种类型。您可能可以返回一个模型类型列表,但只知道它们不会由会话管理。

Session.CreateCriteria<Model>()
   .CreateAlias("Type", "t")
   .Add(Restrictions.Eq("Qualifier", myQualifier)
   .SetProjection(Projections.Distinct(
       Projections.ProjectionList()
          .Add(Projections.Alias(Projections.Property("t.Id"), "Id"))
          .Add(Projections.Alias(Projections.Property("t.TypeName"), "TypeName"))))
   .SetResultTransformer(Transformers.AliasToBean<ModelType>())
于 2011-03-28T15:05:51.820 回答