使用CASE的NHibernate订单

时间:2011-07-08 10:46:05

标签: nhibernate sql-order-by

我在使用nhibernate hql进行排序时遇到了一个大问题。我有一个表LICENSE,它有一个属性USER(对应一个USER类),它将它链接到另一个表USERPROFILE。 USERPROFILE表有一个属性UserName,它是nvarchar(USER类中的字符串)。 LICENSE的此USER属性可以为null,具体取决于是否分配了许可证。

我必须获取按USER属性排序的过滤许可证列表。我希望所有具有空用户的许可证位于列表的底部,并且所有其他许可证按字母顺序排序在其USER的USERNAME属性上。我使用了以下查询:

from License license where <various filters> order by CASE WHEN User IS NULL THEN '0' ELSE User.UserName END"

我从这个查询中得到的只是已分配许可证的列表。不返回具有null USER的所有许可证。有人可以帮帮我吗。

此外,当我使用“按用户IS NULL,然后'0'ELSE User.UserName END”的情况下,只有那些非空用户的结果出现,但是当我使用“按用户ISEN时按CASE排序”那么'0'ELSE User.UserProfileId END“或简单地”按用户排序“所有用户都会出现,但他们的排序顺序是基于UserProfileId而不是userName(因为UserProfileId是外键)。我使用了最新版本的nhibernate但没有任何成功。

我想知道是否有任何办法可以做我想要完成的事情......

1 个答案:

答案 0 :(得分:0)

尝试下载最新版本的NHibernate和fluentnhibernate的最新版本(如果您正在使用它),请使用以下查询: from License license where order by User.UserName END 新版本的NHibernate在使用订单

时正在进行左连接