21

我正在尝试这样做:

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

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

你有想法吗 ?

更新 :

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

4 回答 4

32

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

附加限制

某些 SQL 运算符/函数在 C# 中没有直接等效项。(例如,SQL where name like '%anna%')。这些运算符在 Restrictions 类中具有 QueryOver 的重载,因此您可以编写:

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

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

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

于 2012-07-22T15:47:48.663 回答
4

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

nhibernate queryover LIKE 与表达式树
NHibernate 3.0 搜索与子字符串
queryover 和 (x like 'a' or y like 'a')

于 2012-07-22T15:52:47.687 回答
2
var data = session.QueryOver<tablename>()    
                  .JoinQueryOver<if another table present>(x => x.Empsals)    
                  .WhereRestrictionOn(x => x.FName).IsLike("a%")        
                  .List<EmployeeDetails>();
于 2014-03-10T13:44:22.483 回答
1
WhereRestrictionOn(x => x.FName).IsLike("a%") use like this
于 2014-03-10T13:49:31.410 回答