如何通过NHibernate标准API检索唯一实体?

如何通过NHibernate标准API检索唯一实体?,nhibernate,distinct,Nhibernate,Distinct,我的实体看起来是这样的(简化): 公共类人物 { 公共Guid Id{get;set;} 公共字符串名称{get;set;} 公共IList部门{get;set;} } 公共课系 { 公共Guid Id{get;set;} 公共字符串名称{get;set;} } 我正在通过CriteriaAPI查询数据库,查询所有人的部门名称应与相似模式匹配 一个人包含两个或多个部门,其名称包含查询使用的相同字符序列。因此,同一个人会被返回多次。为了克服这一点,我知道我可以使用criteria.SetResu

我的实体看起来是这样的(简化):

公共类人物
{
公共Guid Id{get;set;}
公共字符串名称{get;set;}
公共IList部门{get;set;}
}
公共课系
{
公共Guid Id{get;set;}
公共字符串名称{get;set;}
}
我正在通过CriteriaAPI查询数据库,查询所有人的部门名称应与相似模式匹配

一个人包含两个或多个部门,其名称包含查询使用的相同字符序列。因此,同一个人会被返回多次。为了克服这一点,我知道我可以使用
criteria.SetResultTransformer(Transformers.distinctrumentity)但这仅在结果未分页时有效

当我分页结果时,我不仅需要得到第一页,还需要知道总共有多少个实体。不幸的是,调用
criteria.SetProjection(Projections.RowCount())
时,结果转换器不工作,因为没有要转换的结果

我是否可以避免使用结果转换器检索整个人员列表,然后手动从集合中取出正确的部分

致以最诚挚的问候

Oliver Hanappi

您需要在sql请求中包含distinct。你可以找到一些信息。第二个答案主要是

当我使用distinct时,只返回包含在distinct投影中的列。NHibernate会再次查询数据库以获取所有数据吗?什么是所有数据?正如我所看到的,你只需要行数,或者你的意思是什么?啊,我明白你的意思了!仍然存在一个问题:当获取分页结果时,将检索到25人。之后,应用结果变压器,例如3人被移除。那么我的查询将返回22人,或者我错了吗?如果您使用的是ResultTransformer,那么是的,它将以这种方式工作。但当您使用投影时,sql执行后就不会有任何操作。
public class Person
{
    public Guid Id { get; set; }
    public string Name { get; set; }

    public IList<Department> Departments { get; set; }
}

public class Department
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}