2014-05-22 430 views
0

我試圖讓我的搜索整個數據庫中列「價值」爲包含搜索字符串的所有結果我的網頁上的搜索功能的所有值的搜索功能。我爲我的項目使用NHibernate,我仍然習慣於應該指定查詢的方式。有返回包含搜索字符串

我目前的搜索功能:

[HttpGet] 
public ActionResult Search(string searchString) 
{ 
    var searchResult = DbSession.QueryOver<Translation>()               
           .Where(x => x.Value.Contains(searchString)) 
           .List(); 
    return Json(searchResult, JsonRequestBehavior.AllowGet); 
} 

最終的查詢將有更多的限制,但首先我需要對數據進行篩選,使得列表僅包含包含搜索字符串的值。 目前,我在.Where(x => x.Value.Contains(searchString))部件上收到System.Exception。 任何人有任何想法?

在此先感謝!

+1

什麼是確切的例外呢? System.Exception真的是異常代碼拋出嗎? – qxg

回答

1

QueryOver是LINQ不同,所以你必須使用WhereRestrictionOn方法。或者使用符合條件的Where。下面是一個例子使用WhereRestrictionOn

[HttpGet] 
public ActionResult Search(string searchString) 
{ 
    var searchResult = DbSession.QueryOver<Translation>() 
          .WhereRestrictionOn(x => x.Value).IsLike("%" + searchString + "%") 
          .List(); 
    return Json(searchResult, JsonRequestBehavior.AllowGet); 
} 

查看更多在這裏:http://nhibernate.info/blog/2009/12/17/queryover-in-nh-3-0.html

+0

謝謝!這就像一個魅力:) – Guinn

-1

可能與x.Value是NULL的問題嗎?

.WHERE(x.Value != null && x.Value.Contains(searchString)) 
+1

請注意,他正在使用'QueryOver'不鏈接。它不支持'string.Contains'如下所示:http://nhforge.org/blogs/nhibernate/archive/2009/12/17/queryover-in-nh-3-0.aspx。 – LawfulHacker

1

更改此:

.Where(x => x.Value.Contains(searchString)) 

有了這個:

.WhereRestrictionOn(x => x.Value).IsLike(searchString, MatchMode.Anywhere) 
相關問題