Sam*_*Sam 6 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> results = query.List().ToList();
Run Code Online (Sandbox Code Playgroud)
我无法在Skip或Take上找到任何帮助.工具提示帮助(是的,我是绝望的)说Skip和Take返回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();
Run Code Online (Sandbox Code Playgroud)
或者,甚至更好:
var results = session.QueryOver<DataAccess.Domain.Product>()
.Where(x => x.Name == "X")
.Take(1)
.Skip(3)
.List();
Run Code Online (Sandbox Code Playgroud)
您可以在此处下载NHibernateQueryOver检查我的代码。
更新:
我认为你错过了一些东西。我建议您阅读这篇文章,它对我来说非常有帮助。在关于关联的
段落中,他们说:
IQueryOver 有两种类型的兴趣;根类型(查询返回的实体的类型)以及正在查询的“当前”实体的类型。例如,以下查询使用联接创建子 QueryOver(类似于在 ICriteria API 中创建子标准):
IQueryOver<Cat,Kitten> catQuery =
session.QueryOver<Cat>()
.JoinQueryOver(c => c.Kittens)
.Where(k => k.Name == "Tiddles");
Run Code Online (Sandbox Code Playgroud)
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();
Run Code Online (Sandbox Code Playgroud)
更新-更新:
NHibernate.IQueryOver<Domain.Person> person = session.QueryOver<Domain.Person>();
var myList = DoSomething(person);
Run Code Online (Sandbox Code Playgroud)
方法:
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4837 次 |
| 最近记录: |