我正在尝试在我的页面上获取搜索功能,该搜索功能在包含搜索字符串的所有结果的“值”列中搜索我的整个数据库。我正在为我的项目使用NHibernate,我仍然习惯于应该指定查询的方式。
我目前的搜索功能:
[HttpGet]
public ActionResult Search(string searchString)
{
var searchResult = DbSession.QueryOver<Translation>()
.Where(x => x.Value.Contains(searchString))
.List();
return Json(searchResult, JsonRequestBehavior.AllowGet);
}
最终查询会有一些限制,但首先我需要过滤数据,以便列表只包含包含searchString的值。
我目前正在.Where(x => x.Value.Contains(searchString))
部分获得System.Exception。
有人有什么想法吗?
提前致谢!
答案 0 :(得分: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
答案 1 :(得分:1)
改变这个:
.Where(x => x.Value.Contains(searchString))
有了这个:
.WhereRestrictionOn(x => x.Value).IsLike(searchString, MatchMode.Anywhere)
答案 2 :(得分:-1)
x.Value可能是NULL的问题?
.WHERE(x.Value != null && x.Value.Contains(searchString))