我正在构建一个通过 Nhibernate 查询数据库的 WPF 应用程序。
我有一个 SQL Server 数据库,其中有一个表xuser
,其中有一个xflag
存储用户权限的标志 ()。
现在我有这个 SQL 查询来提取超级用户或管理员:
select *
from xuser
where (CONVERT(int,xflag) & 2 > 0 ) or (CONVERT(int,xflag) & 1 > 0 )
在哪里2 = flag_administrators
和1 = flag_superusers
如果没有 SQL 函数CONVERT
,此查询将无法正常工作并出现错误:
数据类型 numeric 和 int 在 '&' 运算符中不兼容。
现在在我的 WPF c# nhibnernate 应用程序中,我查询:
var xadmins= session.Query<Xuser>()
.Where(p => (p.Xflag & (int)Flag.FLAG_SUPERUSER)>0).ToList<string>();
此查询不适用于相同的 SQL 错误。
我想在这个 Linq2Nhibernate 查询中使用 T-SQL 函数。我怎样才能做到这一点?
最大的问题是这个应用程序必须使用方言MsSql2008
或Oracle
方言。如果我Convert
在这里使用函数,当我将 db 更改为 时Oracle
,此函数会出错。最好的做法是什么?