我需要使用linq-to-nhibernate,queryover或nhibernate-criteria的firebird SUBSTR
函数编写NHibernate查询。我可以使用hql或SQL
执行此操作,但这些将是我的最后选择。
有没有人有任何想法?以下示例查询将是我的NHibernate查询生成的SQL:
SELECT *
FROM LANCAMENTO
WHERE SUBSTR(LAN_CD_CONTA, 1, 13) = :paramCd_Conta
答案 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。