【问题标题】:Search text contains with QueryOver搜索文本包含 QueryOver
【发布时间】:2012-07-22 15:36:08
【问题描述】:

我正在尝试这样做:

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; }
}

【问题讨论】:

    标签: c# nhibernate queryover


    【解决方案1】:

    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%")

    【讨论】:

    • 谢谢,这是工作。但是 NHProf 警告我性能问题(用“喜欢”)。我可能会保留我当前的代码,一个 Nhibernate 查询,并在对结果进行 linq 查询之后。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
      var data = session.QueryOver<tablename>()    
                        .JoinQueryOver<if another table present>(x => x.Empsals)    
                        .WhereRestrictionOn(x => x.FName).IsLike("a%")        
                        .List<EmployeeDetails>();
      

      【讨论】:

        【解决方案4】:
        WhereRestrictionOn(x => x.FName).IsLike("a%") use like this
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-19
          • 1970-01-01
          • 2021-11-07
          • 2021-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多