作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对使用 NHibernate Criteria 创建的 SQLite 表有一个 View 。现在我想获取 View 中一个特定行的位置,我碰巧知道其中的 ID。
由于我使用 GUID 作为主键,因此我指的是每个 SQLite 表都有的 ROWID 列。
SQL 应该如下所示(在 SQLite 中经过测试并且工作正常):
SELECT COUNT(*) FROM Supplier
WHERE ROWID < (SELECT ROWID FROM Supplier WHERE Id = 'e3a279f6-6761-44a8-b037-f4ea82e9595f')
AND [view restrictions]
Guid id = Guid.Parse("e3a279f6-6761-44a8-b037-f4ea82e9595f")
var rowidSubQuery = DetachedCriteria.For<Supplier>()
[.. flexible view criteria here ..]
.Add(Restrictions.Eq("Id", id))
.SetProjection(Projections.SqlProjection(
"ROWID as row", new[] { "row" }, new IType[] { NHibernateUtil.String }));
int pos = session.CreateCriteria(typeof(Supplier))
.Add(Restrictions.Lt("ROWID", rowid))
.SetProjection(Projections.RowCount())
.UniqueResult<int>();
.Add(Restrictions.Lt("ROWID", rowid))
最佳答案
感谢 Radim,这确实有效!我在我的类中添加了一个新属性并为其添加了一个映射。没想到,但它映射得很好,我可以在查询中使用它。我看到的唯一缺点是我必须为每个项目加载额外的 4 个字节。
public class Supplier
{
...
public virtual int RowId { get; protected set; }
}
public class SupplierMap : ClassMap<Supplier>
{
...
Map(x => x.RowId).ReadOnly();
}
关于sqlite - NHibernate : How to add a criteria on "ROWID" (SQLite special column),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29473476/
我是一名优秀的程序员,十分优秀!