使用QueryOver搜索文本包含

本文关键字:包含 文本 搜索 QueryOver 使用 | 更新日期: 2024-06-14 07:25:55

我正在尝试这样做:

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

但我得到了这个错误:未识别的方法调用:System.String:布尔包含(System.String)

你有主意吗?

更新:

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

使用QueryOver搜索文本包含

NHibernate没有本链接中提到的直接C#等价物http://nhibernate.info/blog/2009/12/17/queryover-in-nh-3-0.html

附加限制

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

Where(Restrictions.On(c=>c.Name).IsLike("%anna%")

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

.WhereRestrictionOn(c=>c.Name).IsLike("%anna%")

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

使用表达式树对LIKE进行nhibernate查询
NHibernate 3.0使用子字符串搜索
queryover和(x类';a';或y类';a';)

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