NHibernate Criteria - 如何过滤属性组合

Dav*_*cia 3 nhibernate expression icriteria

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

SELECT TOP 10 *
FROM Person
WHERE FirstName + ' ' + LastName LIKE '%' + @Term + '%'
Run Code Online (Sandbox Code Playgroud)

我最终使用的NHibernate中的ICriteria是:

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

它工作得很好,但我不确定它是否是理想的解决方案,因为我还在学习NHibernate的Criteria API.推荐的替代品有哪些?

  • 还有什么东西Expression.Sql可以执行相同的操作吗?我尝试Expression.Like但无法弄清楚如何组合名字和姓氏.
  • 我应该将FullName属性映射到映射类中的公式"FirstName +''+ LastName"吗?
  • 我应该在域对象上创建只读FullName属性,然后将其映射到列吗?

Die*_*hon 13

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


Session.CreateCriteria<Person>()
       .Add(Restrictions.Like(
            Projections.SqlFunction("concat",
                                    NHibernateUtil.String,
                                    Projections.Property("FirstName"),
                                    Projections.Constant(" "),
                                    Projections.Property("LastName")),
            term,
            MatchMode.Anywhere))
Run Code Online (Sandbox Code Playgroud)