NHibernate 3.0带子字符串的搜索

NHibernate 3.0带子字符串的搜索,nhibernate,Nhibernate,我正在用3.0 IQueryOver进行搜索,在这里我有一个搜索关键字。我需要搜索一个字符串,看看它是否是字符串的一部分 Query().Where(e => e.Name.Contains(keyword)).List(); 但这并没有达到预期的效果。应该如何执行这样的搜索?据我所知(至少对于SQL Server来说,它似乎不适用于SQL Server Compact),NHibernate将IQueryable转换为不区分大小写的“like“%keywork%”where子句。您希望

我正在用3.0 IQueryOver进行搜索,在这里我有一个搜索关键字。我需要搜索一个字符串,看看它是否是字符串的一部分

Query().Where(e => e.Name.Contains(keyword)).List();

但这并没有达到预期的效果。应该如何执行这样的搜索?

据我所知(至少对于SQL Server来说,它似乎不适用于SQL Server Compact),NHibernate将IQueryable转换为不区分大小写的“like“%keywork%”
where
子句。您希望进行区分大小写的搜索吗?

我检查了NHibernate源代码和
ExpressionProcessor
,查找您上面发布的
QueryOver
字符串不支持
Contains
。它支持的操作是IsLike和IsIn。您可以使用
IsLike
,或者如果您喜欢Contains,可以使用Linq。例如:

(from user in db.Users 
where names.Contains(user.Name)
  select user);


我猜您得到了一个“
无法识别的方法调用
”异常

请包括您正在使用的数据库以及不符合预期的数据库(完全不工作、异常、应包含或不应包含的结果等等)。正如NotroiusXL指出的那样,SQL CE不支持这一点。您是否尝试用“In”替换“Contains”?在这篇文章中,还有其他一些帖子提到了类似于您的问题:正是针对SQLServer2008的。使用NHib 3.0,但发现现在有3.1版可用,因此可能会升级,因为3.0中的空集合崩溃。这是目前的解决方案。正如我所想的那样,我做不到这项工作。它是NHibernate中的一个bug吗?
query.Where(person.Name.IsLike("%test%")) //In QueryOver