C# 使用QueryOver搜索包含的文本

C# 使用QueryOver搜索包含的文本,c#,nhibernate,queryover,C#,Nhibernate,Queryover,我正在尝试这样做: var list = Session.QueryOver<Person>() .Where(x => x.LastName.Contains(searchText)) .List<Person>(); NHibernate没有此链接中提到的直接C#等价物 附加限制 有些SQL运算符/函数在C#中没有直接等价物。 (例如,名称为“%anna%”的SQL语句)。这些运营商 限制类中QueryOver的重载,因此您可以编写: .Whe

我正在尝试这样做:

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

NHibernate没有此链接中提到的直接C#等价物

附加限制

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

.Where(限制.On(c=>c.Name).IsLike(“%anna%”))

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

.WhereRestrictionOn(c=>c.Name).IsLike(“%anna%”)


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



var data=session.QueryOver()
.JoinQueryOver(x=>x.Empsals)
.WhereRestrictionOn(x=>x.FName).IsLike(“a%”)
.List();

谢谢,这就是工作。但是NHProf警告我性能问题(使用“like”)。我可能会保留我的当前代码,一个Nhibernate查询和一个linq查询后的结果。
public class Person
{
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
}
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