Expression.Disjunction() 内的 CreateCriteria 流畅的 nhibernate
criteriaCount.CreateCriteria(AdvertisementsProperties.City.ToString())
.Add(Expression.Like(CitiesProperties.Name.ToString(), query, MatchMode.Anywhere))
.Add(Expression.Like(CitiesProperties.SlovenianName.ToString(), query, MatchMode.Anywhere))
.CreateCriteria(AdvertisementsProperties.Country.ToString())
.Add(Expression.Like(CountriesProperties.Name.ToString(), query, MatchMode.Anywhere))
.Add(Expression.Like(CountriesProperties.SlovenianName.ToString(), query, MatchMode.Anywhere));
这返回“名称如%foo%和slovenianName如%foo%和名称如%foo%和slovenianName如%foo%”,
但我想得到“名称如%foo%或slovenianName如%foo%或名称如%foo % 或 slovenianName like %foo%"
我可以使用 Expression.Disjunction() 进行 OR 但我有问题,我不能在 Expression.Disjunction() 中使用 CreateCriteria。有人可以告诉我如何一起使用 OR 和 CreateCriteria 吗?
问候
criteriaCount.CreateCriteria(AdvertisementsProperties.City.ToString())
.Add(Expression.Like(CitiesProperties.Name.ToString(), query, MatchMode.Anywhere))
.Add(Expression.Like(CitiesProperties.SlovenianName.ToString(), query, MatchMode.Anywhere))
.CreateCriteria(AdvertisementsProperties.Country.ToString())
.Add(Expression.Like(CountriesProperties.Name.ToString(), query, MatchMode.Anywhere))
.Add(Expression.Like(CountriesProperties.SlovenianName.ToString(), query, MatchMode.Anywhere));
This return "name like %foo% and slovenianName like %foo% and name like %foo% and slovenianName like %foo%"
but i would like to get "name like %foo% or slovenianName like %foo% or name like %foo% or slovenianName like %foo%"
i can use Expression.Disjunction() for OR but i have problem that i can not use CreateCriteria inside Expression.Disjunction(). Can someone tell me how can i use OR and CreateCriteria together?
Regards
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 Disjunction() 之外使用 CreateAlias。
相应的实体如下。希望它们与你的相似。
Use CreateAlias outside the Disjunction().
The corresponding entites are below. Hopefully they resemble yours.
上面的例子效果很好,因为其他两个类都是 Property 类的构成。
如果按照这个顺序就不行。
类属性{
公共虚拟int Id { 得到;放; }
publice 虚拟字符串名称 { get;放;}
公共虚拟城市city{get; set;} //多对一
}
城市类 {
公共虚拟int Id { 得到;放; }
公共虚拟字符串名称{ get;放; }
公共虚拟国家country { get;放; } //多对一
}
类国家 {
公共虚拟int Id { 得到;放; }
公共虚拟字符串名称{ get;放; }
}
Above example works good because both of othere classes are the constitutions of Property class.
If it is in this order it doesn't work.
class Property{
public virtual int Id { get; set; }
publice virtual string name { get; set;}
Public virtual City city {get; set;} //many to one
}
class City {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual country country { get; set; } //many to one
}
class Country {
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}