nhibernate - QueryOver API OrderBy 使用案例

标签 nhibernate queryover

如何使用 QueryOver API 执行以下 LINQ to NHibernate 查询。这会从数据库中获取 Item 的所有记录的列表,并将状态为“Returned”的 Item 放置到列表的末尾。状态是一个枚举,映射到数据库中的 nvarchar。

var workList = session.Query<Item>()
                .OrderBy(i=> i.Status == Status.Returned ? 1 : 0)
                .ToList();

等效的 SQL 是

SELECT *
FROM Item
ORDER BY case when Status='Returned' then 1 else 0 end

我当然尝试过

var workList = session.QueryOver<Item>()
                .OrderBy(i => i.Status == Status.Returned ? 1 : 0).Asc
                .ToList();

但我得到以下内容

InvalidOperationException: variable 'i' of type 'MyProject.Model.Entities.Item' referenced from scope '', but it is not defined

由于本例中其他一些功能存在问题,我无法使用 LINQ。

最佳答案

您应该在这里使用 Projections.Conditional 来代替:

Item itemAlias = null;

var workList = 
    session.QueryOver<Item>(() => itemAlias)
        .OrderBy(Projections.Conditional(
            Restrictions.Where(() => itemAlias.Status == Status.Returned),
            Projections.Constant(1),
            Projections.Constant(0))).Asc
        .List();

这有点冗长,但应该可以完成工作。

关于nhibernate - QueryOver API OrderBy 使用案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12428159/

相关文章:

NHIbernate:投影所有属性的快捷方式?

c# - 具有附加连接条件的 NHibernate QueryOver .Left.JoinAlias

NHibernate 将 0 保存到多对一列而不是 null

c# - NHibernate Linq Query Where(x => x is Base Class) 没有得到派生对象

sqlite - nHibernate 3.0.0.4000 在查询中以不同方式处理 bool 值?

Nhibernate QueryOver Orderby

nhibernate - 使用 JoinQueryOver : Get greatgrandchildren, 获取知道父亲

nhibernate - QueryOver IN 子句?

c# - 使用 NHibernate 的 ModelMapper 并通过代码进行映射

c# - NHibernate 对象引用一个未保存的 transient 实例在刷新之前保存 transient 实例