如何将Skip和Take附加到nHibernate IQueryOver

如何将Skip和Take附加到nHibernate IQueryOver,nhibernate,queryover,Nhibernate,Queryover,我想这样做: NHibernate.IQueryOver<DataAccess.Domain.Product, DataAccess.Domain.Product> query = session.QueryOver<DataAccess.Domain.Product>(); query = query.Where(x => x.Name == "X"); query = query.Take(1).Skip(3); List<Product> resu

我想这样做:

NHibernate.IQueryOver<DataAccess.Domain.Product, DataAccess.Domain.Product> query = session.QueryOver<DataAccess.Domain.Product>();
query = query.Where(x => x.Name == "X");
query = query.Take(1).Skip(3);
List<Product> results = query.List().ToList();
NHibernate.IQueryOver query=session.QueryOver();
query=query.Where(x=>x.Name==“x”);
query=query.Take(1)、Skip(3);
列表结果=query.List().ToList();

我找不到任何关于跳绳或跳绳的帮助。工具提示帮助(是的,我很绝望)说Skip and Take return IQueryOver,但是错误消息说“不能隐式地将IQueryOver{T}转换为IQueryOver{T,T}。我不知道IQueryOver{T,T}是什么。我也没有要求任何一个这样的代码。

尝试这样更改代码:

NHibernate.IQueryOver<DataAccess.Domain.Product> query = session.QueryOver<DataAccess.Domain.Product>();
query = query.Where(x => x.Name == "X");
query = query.Take(1).Skip(3);
var results = query.List();
NHibernate.IQueryOver query=session.QueryOver();
query=query.Where(x=>x.Name==“x”);
query=query.Take(1)、Skip(3);
var results=query.List();
或者,更好的是:

var results = session.QueryOver<DataAccess.Domain.Product>()
       .Where(x => x.Name == "X")
       .Take(1)
       .Skip(3)
       .List();
var results=session.QueryOver()
。其中(x=>x.Name==“x”)
.采取(1)
.跳过(3)
.List();
您可以查看我的代码下载NHibernateQueryOver

更新:

NHibernate.IQueryOver<Domain.Person> person = session.QueryOver<Domain.Person>();
var myList = DoSomething(person);
我想你遗漏了什么。我建议你读一下这篇对我很有帮助的文章。
在关于协会的段落中,他们说:

IQueryOver有两种类型的兴趣:根类型(查询返回的实体类型)和“当前”实体类型 正在查询。例如,以下查询使用联接创建 子查询(有助于在ICriteria中创建子标准 API):

IQueryOver catQuery=
session.QueryOver()
.JoinQueryOver(c=>c.小猫)
其中(k=>k.Name==“Tiddles”);
JoinQueryOver返回IQueryOver的一个新实例 它的根位于Kittens集合。限制的默认类型 现在是Kitten(限制在上面的“Tiddles”名称上) 例如),调用.List()时将返回IList IQueryOver继承自IQueryOver

当我想构建多个过滤器时,我会这样做:

Domain.OrderAddress addressDestination = null;
Domain.Customer customer = null;
Domain.TermsConditionsOfSale termsConditionsOfSale = null;

ICriterion filter1 = Restrictions.Where<Domain.Order>(t => t.Company == "MYCOMPANY");
ICriterion filter2 = Restrictions.Where<Domain.Order>(t => t.WareHouseDelivery == "DEPXX");
ICriterion filter3 = Restrictions.Where<Domain.Order>(t => t.Status == "X");
ICriterion filter4 = Restrictions.Where(() => addressDestination.AddressType == "99");
ICriterion filter5 = Restrictions.Where(() => addressDestination.Province.IsIn(new string[] { "AA", "BB", "CC" }));
ICriterion filter6 = Restrictions.Where(() => termsConditionsOfSale.ReturnedGoodsCode != "01");

var ordersForProvinces = session.QueryOver<Domain.Order>()
    .Inner.JoinAlias(t => t.OrderAddresses, () => addressDestination)
        .Inner.JoinAlias(t => t.Customer, () => customer)
        .Left.JoinAlias(t => t.TermsConditionsOfSale, () => termsConditionsOfSale);

ordersForProvinces
    .Where(filter1)
        .And(filter2)
        .And(filter3)
        .And(filter4)
        .And(filter5)
        .And(filter6);

var Results = ordersForProvinces.Skip(50).Take(20).List();
Domain.orderAddressAddressDestination=null;
Domain.Customer=null;
Domain.TermsConditionsOfSale TermsConditionsOfSale=null;
ICriterion filter1=限制。其中(t=>t.Company==“MYCOMPANY”);
ICriterion filter2=限制。其中(t=>t.WareHouseDelivery==“DEPXX”);
ICriterion filter3=限制。其中(t=>t.Status==“X”);
ICriterion filter4=限制。其中(()=>addressDestination.AddressType==“99”);
ICriterion filter5=限制。其中(()=>addressDestination.Province.IsIn(新字符串[]{“AA”、“BB”、“CC”}));
ICriterion filter6=限制。其中(()=>termsConditionsOfSale.ReturnedGoodCode!=“01”);
var ordersforprovisions=session.QueryOver()
.internal.JoinAlias(t=>t.OrderAddresses,()=>addressDestination)
.internal.JoinAlias(t=>t.Customer,()=>Customer)
.Left.JoinAlias(t=>t.TermsConditionsOfSale,()=>TermsConditionsOfSale);
订单或建议
.其中(过滤器1)
.和(过滤器2)
.和(过滤器3)
.和(过滤器4)
.和(过滤器5)
.及(过滤器6);
var Results=ordersforprovisions.Skip(50).Take(20).List();
UPDATE-UPDATE:

NHibernate.IQueryOver<Domain.Person> person = session.QueryOver<Domain.Person>();
var myList = DoSomething(person);
NHibernate.IQueryOver person=session.QueryOver();
var myList=剂量(人);
方法:

private static IList<Domain.Person> DoSomething(NHibernate.IQueryOver<Domain.Person> persons)
{
    ICriterion filter1 = Restrictions.Where<Domain.Person>(t => t.CompanyName.IsLike("Customer%"));

    persons.RootCriteria.Add(filter1);
    var x = persons.Skip(1).Take(3).List();
    return (x);
}
private static IList DoSomething(NHibernate.IQueryOver persons)
{
ICriterion filter1=限制。其中(t=>t.CompanyName.IsLike(“客户%”);
persons.RootCriteria.Add(filter1);
var x=persons.Skip(1).Take(3.List();
返回(x);
}

谢谢你的左键回复-但它没有给我一个iqueryover{T}对象。我不想要数据,我想要查询,我想要查询包含skip/take。再次感谢。@user866293:这里有两个示例,第一个示例为NHibernate.IQueryOverLefty,很抱歉,但是示例1未编译。如果我删除IQueryOver{t,t}中的第二个t,则行query=query.where(…)给出错误消息。如果我离开第二个T,行query=query.Skip(…)没有编译。我是否缺少一个using语句?我有:using NHibernate;using NHibernate.Criteria;using NHibernate.Linq;@Sam:确保您使用的是最新的NHibernate版本之一。我使用的是NHibernate 3.1.0.4000,它应该可以工作,除非有其他内容。我使用的是相同的版本:3.1.0.4000。您是否能够实际构建然后运行一个类似的语句?我在我的家庭/工作机器上得到了相同的错误。