搜索文本包含QueryOver

时间:2012-07-22 15:36:09

标签: c# nhibernate queryover

我正在尝试这样做:

var list = Session.QueryOver<Person>()
    .Where(x => x.LastName.Contains(searchText))
    .List<Person>();

但我收到此错误:无法识别的方法调用:System.String:Boolean包含(System.String)

你有什么想法吗?

更新:

public class Person
{
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
}

4 个答案:

答案 0 :(得分:31)

NHibernate没有与此链接http://nhibernate.info/blog/2009/12/17/queryover-in-nh-3-0.html

中提到的直接C#等效
  

其他限制

     

某些SQL运算符/函数在C#中没有直接的等价物。   (例如,SQL的名称如'%anna%')。这些运营商有   Restrictions类中的QueryOver重载,因此您可以编写:

     

.Where(Restrictions.On(c =&gt; c.Name).IsLike(“%anna%”))

     

还有一种内联语法可以避免类型的限定:

     

.WhereRestrictionOn(c =&gt; c.Name).IsLike(“%anna%”)

答案 1 :(得分:3)

看起来QueryOver不支持Contains方法。您可以尝试使用IsLike限制:

nhibernate queryover LIKE with expression trees
NHibernate 3.0 search with substring
queryover and (x like 'a' or y like 'a')

答案 2 :(得分:1)

var data = session.QueryOver<tablename>()    
                  .JoinQueryOver<if another table present>(x => x.Empsals)    
                  .WhereRestrictionOn(x => x.FName).IsLike("a%")        
                  .List<EmployeeDetails>();

答案 3 :(得分:1)

WhereRestrictionOn(x => x.FName).IsLike("a%") use like this