【问题标题】:NHibernate Expression.Like Criteria on Two FieldsNHibernate Expression.Like 两个字段的标准
【发布时间】:2011-03-17 11:07:58
【问题描述】:

我有一个具有 Firstname 和 Surname 属性的 Nhibernate 对象,我希望能够查询这两个字段(Firstname + " " + Surname);例如如果搜索词是“John Doe”,那么当 John 和 Doe 在不同的字段中时,就会匹配到。

我怎样才能做到这一点? 谢谢!

【问题讨论】:

    标签: c# .net nhibernate fluent-nhibernate


    【解决方案1】:

    所以我最终选择了:

    .Add(Restrictions.Like(Projections.SqlFunction("concat",
            NHibernateUtil.String,
            Projections.Property("Firstname"),
            Projections.Constant(" "),
            Projections.Property("Surname")),
        searchString, MatchMode.Anywhere))
    

    这似乎可以按我的需要工作。

    【讨论】:

      【解决方案2】:
      string firstName = "John";
      string lastName = "Doe";
      

      例如,使用 LINQ:

      Session.Query<User>()
             .Where(u => u.FirstName == firstName || u.Surname == lastName)
             .ToList();
      

      你可以用 QueryOver 来做,看起来几乎一样:

      Session.QueryOver<User>()
             .Where(u => u.FirstName == firstName || u.Surname == lastName)
             .List();
      

      更新: 我错过了问题的重点。

      这个呢:

      var name = "John Doe";
      Session.Query<User>()
             .Where(u => name.Contains(u.FirstName) || name.Contains(u.Surname))
             .ToList();
      

      【讨论】:

      • 这不是我要找的,输入搜索字符串将是单个术语中的“John Doe”,因此它需要与连接字段匹配。谢谢。
      • 可能会更好。拆分字符串并将它们作为部分进行搜索。
      • 谢谢,虽然我最终使用了 Criteria API,因为我在这个项目中没有使用 Linq。
      猜你喜欢
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 1970-01-01
      • 2015-06-10
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多