如何使用 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/