gpt4 book ai didi

c# - NHibernate COALESCE 问题

转载 作者:行者123 更新时间:2023-11-30 15:28:05 25 4
gpt4 key购买 nike

我正在尝试用 NHibernate 表达以下 SQL 查询

DECLARE @date DATETIME = NULL;

SELECT
ER.Id
, ER.DocumentDate
FROM
ExpenseReport ER
WHERE
ER.PeriodFrom >= COALESCE(@date, ER.PeriodFrom)
OR ER.PeriodTo <= COALESCE(@date, ER.PeriodTo);

因此,在 C# 部分我有以下类:

  • 实体:费用报表
  • 我的搜索本身是一个单独的类

代码片段:

// ----- Entity class.
public partial class ExpenseReport
{
public Nullable<System.DateTime> PeriodFrom { get; set; }
// many other properties
}

// ----- Search parameter class.
public class SearchParameters
{
public Nullable<System.DateTime> DateFrom { get; set; }
// many other properties
}

因此,现在将搜索参数分配给 IQueryOver<ExpenseReport>

var q = SessionProvider.QueryOver<ExpenseReport>();

我现在对 NHibernate 有点迷茫....我现在该怎么做?

q.And( /*** I AM STUCK HERE **/)

最佳答案

起草的代码应如下所示:

// left side
var left = Projections.Property<ExpenseReport>(ti => ti.PeriodFrom);
// right side
var right = Projections.SqlFunction("COALESCE"
, NHibernateUtil.DateTime
, Projections.Constant(search.DateFrom, NHibernateUtil.DateTime)
, Projections.Property<ExpenseReport>(ti => ti.PeriodFrom)
);
// the restriction using the GeProperty, taking two IProjections
var restriction = Restrictions.GeProperty(left, right);

// finally - our query get its WHERE
q.Where(restriction);

因此,我们首先创建两个投影。然后我们使用 Restrictions 实用程序集来创建 >= (GeProperty)。结果限制最终传递到 WHERE 子句中......

关于c# - NHibernate COALESCE 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26364036/

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