C# 具有多个结果的NHibernate标准

C# 具有多个结果的NHibernate标准,c#,nhibernate,C#,Nhibernate,使用HQL,您可以构建如下查询,只需在select子句中使用逗号分隔的列表,即可为所选的每一行返回一个对象数组: 选择母亲、子女、配偶。姓名 作为母亲的家猫 内在结合母亲。以配偶为配偶 左外接母。小猫为后代 你会如何使用ICriteria?具体地说,我正在尝试构建一个分页查询,该查询还将返回同一查询中的总行数 Ayende展示了如何使用HQL()实现这一点。我需要使用ICriteria复制此功能。Ayende还添加了多标准支持:。这显然是在2.0版本中。Ayende还添加了多标准支持:。显然,这

使用HQL,您可以构建如下查询,只需在select子句中使用逗号分隔的列表,即可为所选的每一行返回一个对象数组:

选择母亲、子女、配偶。姓名 作为母亲的家猫 内在结合母亲。以配偶为配偶 左外接母。小猫为后代

你会如何使用ICriteria?具体地说,我正在尝试构建一个分页查询,该查询还将返回同一查询中的总行数


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