NHibernate将本地日期年和月与日期集合进行比较

时间:2019-05-24 15:24:27

标签: c# lambda nhibernate

我想做的是:

tradingObjectQueryOver.Where(
  Restrictions
    .On<OrderDealDto>(d => d.UnderlyingContractMaturity.Value.ToContractName())
    .IsInG(filter.ContractDates.ToContractName()));

其中

public const string ContractNameFormat = "MMMyy";
public static string ToContractName(this LocalDate date)
{
    return date.ToString(ContractNameFormat, UsCulture).ToUpper();
}

,因此我无法调用d.UnderlyingContractMaturity.Value.ToContractName(),因为SQL对诸如ToString之类的c#方法一无所知。解决此问题的最简单方法是依赖TSQL的函数?

new SQLFunctionTemplate(NHibernateUtil.String, "FORMAT(?1, 'yyyMM', 'us-US')");

但是同时我不想降低性能,这只是查询的很小一部分,db中的元素规模为100k-10m。

1 个答案:

答案 0 :(得分:0)

所以我最终在sql端使用了一个函数

ALTER FUNCTION [dbo].[f_ToContractName] (@date DATE)
RETURNS NVARCHAR(5)
AS 
BEGIN
    RETURN UPPER(REPLACE(RIGHT(CONVERT(VARCHAR(9),@date, 6), 6), ' ', ''))
END