代码之家  ›  专栏  ›  技术社区  ›  DavGarcia

NHibernate标准-如何根据属性组合进行过滤

  •  3
  • DavGarcia  · 技术社区  · 15 年前

    我需要使用两个属性的组合来过滤结果列表。普通SQL语句如下所示:

    SELECT TOP 10 *
    FROM Person
    WHERE FirstName + ' ' + LastName LIKE '%' + @Term + '%'
    

    ICriteria criteria = Session.CreateCriteria(typeof(Person));
    criteria.Add(Expression.Sql(
        "FirstName + ' ' + LastName LIKE ?",
        "%" + term + "%",
        NHibernateUtil.String));
    criteria.SetMaxResults(10);
    

    它工作得很好,但我不确定它是否是理想的解决方案,因为我还在学习NHibernate的criteriaapi。推荐的替代方案是什么?

    • Expression.Sql 执行相同的操作?我试过了 Expression.Like 但不知道怎么把名字和姓氏结合起来。
    • 我应该将FullName属性映射到映射类中的公式“FirstName+''+LastName”吗?
    2 回复  |  直到 15 年前
        1
  •  13
  •   DavGarcia    15 年前

    您可以执行以下操作之一:


    Session.CreateCriteria<Person>()
           .Add(Restrictions.Like(
                Projections.SqlFunction("concat",
                                        NHibernateUtil.String,
                                        Projections.Property("FirstName"),
                                        Projections.Constant(" "),
                                        Projections.Property("LastName")),
                term,
                MatchMode.Anywhere))
    
        2
  •  0
  •   Jaguar    15 年前

    在纯技术方面,我没有答案,但考虑一下:

    ICriteria criteria = Session.CreateCriteria(typeof(Person));
    criteria.Add(Expression.Like("FirstName",term, MatchMode.Anywhere) || Expression.Like("LastName",term, MatchMode.Anywhere));
    criteria.SetMaxResults(10);
    
    推荐文章