Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何无条件克隆Nhibernate QueryOver?_Nhibernate_Clone_Queryover - Fatal编程技术网

如何无条件克隆Nhibernate QueryOver?

如何无条件克隆Nhibernate QueryOver?,nhibernate,clone,queryover,Nhibernate,Clone,Queryover,我有以下问题: var q = Session.QueryOver<CostCenter>().Where(c => c.PrimeCompany.Id == idPrimeCompany); var q=Session.QueryOver()。其中(c=>c.PrimeCompany.Id==idPrimeCompany); 我需要克隆QueryOver,但没有“where子句”。这可能吗?使用根实体(session.QueryOver调用中使用的类)并构建一个新查询 v

我有以下问题:

var q = Session.QueryOver<CostCenter>().Where(c => c.PrimeCompany.Id == idPrimeCompany);
var q=Session.QueryOver()。其中(c=>c.PrimeCompany.Id==idPrimeCompany);
我需要克隆QueryOver,但没有“where子句”。这可能吗?

使用根实体(session.QueryOver调用中使用的类)并构建一个新查询

var roottype = theQueryOver.UnderlyingCriteria.GetRootEntityTypeIfAvailable();

var totalCount = session.CreatCriteria(roottype).SetProjection(Projections.RowCount()).UniqueReasult<long>();
var roottype=queryover.underyingcriteria.GetRootEntityTypeIfAvailable();
var totalCount=session.CreatCriteria(roottype).SetProjection(Projections.RowCount()).UniqueReasult();

您可以使用
clone()
完全克隆它。。。但是部分克隆它。。。嗯……我用了Clone(),但是,正如你所说的,完全返回=/我不认为有一种“合法”的方法可以从
查询版本
(或者从
ICriteria
中删除限制,这通常是
查询版本
的基础)。可以建造一些有反射的东西,但我不会用40英尺长的杆子去碰它。删除似乎与您想要的正好相反,但是
Clone()+Remove()
将是完美的解决方案:-)您到底想要实现什么?你能在添加where子句之前克隆查询吗?我有一个方法,它接收一个QueryOver作为参数。有了它,我用当前查询版本构建了一个列表,我需要计算没有当前条件的行数,计算所有行数。这不会保存连接,对吗?在给出的示例中,它只检索
typeof(CostCenter)
问题中没有连接。您需要计算rootobjects还是由笛卡尔乘积连接创建的行?如果是后者,那么为什么呢?不,但重点是您应该解释
getRootEntityTypeIfavaailable
的功能…添加了在您的示例中它将获得类型为(CostCenter)的rootentity的信息。