我正在尝试将以下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类型的列表。
谢谢
发布于 2011-03-28 23:05:52
有好消息也有坏消息。您可以创建一个返回ModelTypes列表的条件。但是,它们不会被会话管理。原因是,distinct查询只能返回投影,而投影始终是非托管的。
下面的查询将生成与上面类似的查询,因为它在两个实体之间执行内部连接,并根据这两列返回一个不同的集合。结果转换器应该设置为生成一些可以通过属性设置的类型。您可能会返回一个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>())https://stackoverflow.com/questions/5458775
复制相似问题