gpt4 book ai didi

NHibernate 标准 - 如何过滤属性组合

转载 作者:行者123 更新时间:2023-12-01 07:31:39 26 4
gpt4 key购买 nike

我需要使用两个属性的组合来过滤结果列表。一个简单的 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 属性,然后将其映射到列吗?
  • 最佳答案

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

  • 如果您总是使用全名,那么最好只有一个属性
  • 为此目的创建一个仅查询属性(请参阅 http://ayende.com/Blog/archive/2009/06/10/nhibernate-ndash-query-only-properties.aspx )
  • 在 HQL 中进行查询,它更适合自由格式查询(它可能与您的 SQL 几乎相同)
  • 使用适当的基于实体的标准:

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

    关于NHibernate 标准 - 如何过滤属性组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2936700/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com