Csharp/C#教程:NHibernate COALESCE问题分享


NHibernate COALESCE问题

我试图用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 PeriodFrom { get; set; } // many other properties } // ----- Search parameter class. public class SearchParameters { public Nullable DateFrom { get; set; } // many other properties } 

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

 var q = SessionProvider.QueryOver(); 

我现在有点迷失NHibernate ……我现在该怎么做?

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

草拟的代码应如下所示:

 // left side var left = Projections.Property(ti => ti.PeriodFrom); // right side var right = Projections.SqlFunction("COALESCE" , NHibernateUtil.DateTime , Projections.Constant(search.DateFrom, NHibernateUtil.DateTime) , Projections.Property(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问题分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/936336.html

(0)
上一篇 2021年11月7日
下一篇 2021年11月7日

精彩推荐