使用Firebird的函数“SUBSTR”进行查询

时间:2016-05-16 17:22:05

标签: c# sql linq nhibernate firebird

我需要使用的firebird SUBSTR函数编写NHibernate查询。我可以使用SQL执行此操作,但这些将是我的最后选择。

有没有人有任何想法?以下示例查询将是我的NHibernate查询生成的SQL:

SELECT *
FROM LANCAMENTO
WHERE SUBSTR(LAN_CD_CONTA, 1, 13) = :paramCd_Conta

1 个答案:

答案 0 :(得分:1)

使用Linq,声明一个SubStr扩展方法:

using NHibernate.Linq;

...

public static class CustomLinqExtensions
{
    [LinqExtensionMethod("SUBSTR")]
    public static string SubStr(this string dummy, int start, int length)
    {
        // No need to implement it in .Net, unless you wish to call it
        // outside IQueryable context too.
        throw new NotImplementedException("This call should be translated " +
            "to SQL and run db side, but it has been run with .Net runtime");
    }
}

然后在您的实体上使用它:

session.Query<Lancamento>()
    .Where(l => l.CdConta.SubStr(1, 13) == cdConta)
    .ToList();

注意,尝试在不使用实体的情况下使用它将导致使用.Net运行时进行评估,而不是将其转换为SQL。