C# 具有多个结果的NHibernate标准
使用HQL,您可以构建如下查询,只需在select子句中使用逗号分隔的列表,即可为所选的每一行返回一个对象数组: 选择母亲、子女、配偶。姓名 作为母亲的家猫 内在结合母亲。以配偶为配偶 左外接母。小猫为后代 你会如何使用ICriteria?具体地说,我正在尝试构建一个分页查询,该查询还将返回同一查询中的总行数C# 具有多个结果的NHibernate标准,c#,nhibernate,C#,Nhibernate,使用HQL,您可以构建如下查询,只需在select子句中使用逗号分隔的列表,即可为所选的每一行返回一个对象数组: 选择母亲、子女、配偶。姓名 作为母亲的家猫 内在结合母亲。以配偶为配偶 左外接母。小猫为后代 你会如何使用ICriteria?具体地说,我正在尝试构建一个分页查询,该查询还将返回同一查询中的总行数 Ayende展示了如何使用HQL()实现这一点。我需要使用ICriteria复制此功能。Ayende还添加了多标准支持:。这显然是在2.0版本中。Ayende还添加了多标准支持:。显然,这
Ayende展示了如何使用HQL()实现这一点。我需要使用ICriteria复制此功能。Ayende还添加了多标准支持:。这显然是在2.0版本中。Ayende还添加了多标准支持:。显然,这是在2.0版本中。我认为答案在于预取您想要的关联。这样,您就可以在一次拍摄中获取所需的对象图部分。您可以在这样的条件查询中执行此操作
ICriteria query = session.CreateCriteria(typeof (Cat))
.SetFetchMode("Mate", FetchMode.Join)
.SetFetchMode("Kittens", FetchMode.Join);
IList<Cat> results = query.List<Cat>();
这将返回与hql查询基本相同的结果,但是它不会使用索引列表,而是使用将别名映射到实体的字典。我认为答案在于预取您想要的关联。这样,您就可以在一次拍摄中获取所需的对象图部分。您可以在这样的条件查询中执行此操作
ICriteria query = session.CreateCriteria(typeof (Cat))
.SetFetchMode("Mate", FetchMode.Join)
.SetFetchMode("Kittens", FetchMode.Join);
IList<Cat> results = query.List<Cat>();
这将返回与hql查询基本相同的结果,但不会使用索引列表,而是使用将别名映射到实体的字典。您还可以通过操作条件上的结果集来进行分页: ICriteria query=session.CreateCriteria(typeof(Cat),“母亲”) query.SetFirstResult(x);//x=页面开始 query.SetMaxResults(y);//y=页面大小
List results=query.List() 您还可以通过操纵条件上的结果集来进行分页: ICriteria query=session.CreateCriteria(typeof(Cat),“母亲”) query.SetFirstResult(x);//x=页面开始 query.SetMaxResults(y);//y=页面大小
List results=query.List() 您可以通过这种方式将标准转换为计数标准
DetachedCriteria countCriteria = CriteriaTransformer.TransformToRowCount(criteria); // criteria = your criteria
rowCount = countCriteria.GetExecutableCriteria(session).UniqueResult<int>();
DetachedCriteria countCriteria=CriteriaTransformer.TransformToRowCount(标准);//标准=您的标准
rowCount=countCriteria.GetExecutableCriteria(会话).UniqueResult();
您可以通过这种方式将标准转换为计数标准
DetachedCriteria countCriteria = CriteriaTransformer.TransformToRowCount(criteria); // criteria = your criteria
rowCount = countCriteria.GetExecutableCriteria(session).UniqueResult<int>();
DetachedCriteria countCriteria=CriteriaTransformer.TransformToRowCount(标准);//标准=您的标准
rowCount=countCriteria.GetExecutableCriteria(会话).UniqueResult();
将此信息发布到nhusers@googlegroups.com此外,我已经发布了一个用于icriteria的行数解决方案,请将此检查发布到nhusers@googlegroups.com此外,我已经发布了一个用于icriteria的行数解决方案,请检查是否有用,但在我的例子中,我有一个复杂的select语句,我不想运行两次。必须有一种方法可以在一个语句中实现,只要在(x)上有另一列COUNT(*)作为totalrowst,这可能很有用,但在我的例子中,我有一个复杂的select语句,我不想运行两次。必须有一种方法可以在一条语句中实现,只需在(x)上为COUNT(*)添加另一列作为TotalRows