我正在尝试将以下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类型的列表。
由于
答案 0 :(得分:1)
有好消息和坏消息。您可以创建将返回ModelType列表的条件。但是,它们不会被会话管理。原因是,一个独特的查询只能返回一个投影,而投影总是不受管理。
下面的查询将生成与上述类似的查询,因为它执行两个实体之间的内部联接,并基于这两个列返回不同的集合。应将结果转换器设置为生成可通过属性设置的某种类型。您可以返回ModelTypes列表,但只知道它们不会被会话管理。
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>())