【发布时间】:2011-03-17 11:07:58
【问题描述】:
我有一个具有 Firstname 和 Surname 属性的 Nhibernate 对象,我希望能够查询这两个字段(Firstname + " " + Surname);例如如果搜索词是“John Doe”,那么当 John 和 Doe 在不同的字段中时,就会匹配到。
我怎样才能做到这一点? 谢谢!
【问题讨论】:
标签: c# .net nhibernate fluent-nhibernate
我有一个具有 Firstname 和 Surname 属性的 Nhibernate 对象,我希望能够查询这两个字段(Firstname + " " + Surname);例如如果搜索词是“John Doe”,那么当 John 和 Doe 在不同的字段中时,就会匹配到。
我怎样才能做到这一点? 谢谢!
【问题讨论】:
标签: c# .net nhibernate fluent-nhibernate
所以我最终选择了:
.Add(Restrictions.Like(Projections.SqlFunction("concat",
NHibernateUtil.String,
Projections.Property("Firstname"),
Projections.Constant(" "),
Projections.Property("Surname")),
searchString, MatchMode.Anywhere))
这似乎可以按我的需要工作。
【讨论】:
string firstName = "John";
string lastName = "Doe";
例如,使用 LINQ:
Session.Query<User>()
.Where(u => u.FirstName == firstName || u.Surname == lastName)
.ToList();
你可以用 QueryOver 来做,看起来几乎一样:
Session.QueryOver<User>()
.Where(u => u.FirstName == firstName || u.Surname == lastName)
.List();
更新: 我错过了问题的重点。
这个呢:
var name = "John Doe";
Session.Query<User>()
.Where(u => name.Contains(u.FirstName) || name.Contains(u.Surname))
.ToList();
【讨论】: