2011-03-17 51 views
4

我有一個Nhibernate對象,它具有屬性Firstname和Surname,並且我希望能夠在兩個字段(Firstname +「」+ Surname)上查詢;例如如果搜索項是「John Doe」,當John和Doe處於不同的字段時,這將匹配。在兩個字段上的NHibernate Expression.Like標準

我該如何做到這一點? 謝謝!

回答

4

所以我結束了去:

.Add(Restrictions.Like(Projections.SqlFunction("concat", 
     NHibernateUtil.String, 
     Projections.Property("Firstname"), 
     Projections.Constant(" "), 
     Projections.Property("Surname")), 
    searchString, MatchMode.Anywhere)) 

這似乎工作,因爲我需要它。

0
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(); 
+0

這不是我正在尋找的內容,輸入搜索字符串在單個術語中是「John Doe」,因此它需要與連接字段進行匹配。謝謝。 – RSlaughter 2011-03-17 11:26:36

+0

糟糕。對於那個很抱歉 :)。在我的回覆中添加了一個更新 – psousa 2011-03-17 11:29:07

+0

可能更適合.split字符串並將它們搜索爲部分。 – 4imble 2011-03-17 11:46:01