我需要使用两个属性的组合来过滤结果列表。一个普通的 SQL 语句如下所示:
SELECT TOP 10 *
FROM Person
WHERE FirstName + ' ' + LastName LIKE '%' + @Term + '%'
我最终使用的 NHibernate 中的 ICriteria 是:
ICriteria criteria = Session.CreateCriteria(typeof(Person));
criteria.Add(Expression.Sql(
"FirstName + ' ' + LastName LIKE ?",
"%" + term + "%",
NHibernateUtil.String));
criteria.SetMaxResults(10);
它运行良好,但我不确定它是否是理想的解决方案,因为我仍在学习 NHibernate 的 Criteria API。有哪些推荐的替代方案?
- 除此之外还有什么
Expression.Sql
可以执行相同的操作吗?我试过Expression.Like
但不知道如何组合名字和姓氏。 - 我应该将 FullName 属性映射到映射类中的公式“FirstName + ' ' + LastName”吗?
- 我应该在域对象上创建一个只读 FullName 属性,然后将其映射到列吗?