Pea*_*yle 8 nhibernate queryover
如何使用QueryOver API执行以下LINQ to NHibernate查询.这将从DB获取Item的所有记录的列表,并将状态为"Returned"的Items放置到列表的末尾.状态是Enum,它映射到数据库中的nvarchar.
var workList = session.Query<Item>()
.OrderBy(i=> i.Status == Status.Returned ? 1 : 0)
.ToList();
Run Code Online (Sandbox Code Playgroud)
SQL等价物是
SELECT *
FROM Item
ORDER BY case when Status='Returned' then 1 else 0 end
Run Code Online (Sandbox Code Playgroud)
我当然试过了
var workList = session.QueryOver<Item>()
.OrderBy(i => i.Status == Status.Returned ? 1 : 0).Asc
.ToList();
Run Code Online (Sandbox Code Playgroud)
但我得到以下内容
InvalidOperationException:从范围''引用的'MyProject.Model.Entities.Item'类型的变量'i',但它未定义
我不能使用LINQ,因为在这种情况下有一些其他功能的问题.
And*_*ker 14
你可以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();
Run Code Online (Sandbox Code Playgroud)
它有点冗长,但它应该完成工作.
归档时间: |
|
查看次数: |
1916 次 |
最近记录: |