使用 CreateCriteria 并根据最大值选择行
我想使用 CreateCriteria 从数据库中的一个表中选择一行,其中我有一列的已知值,而不是主键,因此会有多行匹配。该表包含更新信息,因此我们有一列包含每行的版本号,根据该版本号和我的主要问题给出一个唯一的行。
我已经尝试了以下可行的方法,但似乎我应该能够使用更好的东西。如果有某种 Restriction.Max("Avtal")
var result = Session.CreateCriteria(typeof(Avtal))
.Add(Restrictions.Eq("Avtal", avtal))
.Add(Restrictions.Eq("Versionsnummer",
Session.CreateCriteria((typeof(Avtal)))
.Add(Restrictions.Eq("Avtal", avtal))
.SetProjection(Projections.Max("version"))
.UniqueResult<int>()))
.List<Avtal>();
任何指向正确方向的指针都会非常有帮助,不,我不想使用 CreateQuery,直接编写 HQL 或其他东西就像这样,我们使用 Critierias 并希望坚持这一点。
谢谢
I want to select a row from one table in the database using CreateCriteria where I have a know value for a column, not primary key so there will be multiple rows matching. The table contains update information so we have a column that contains a version number for each row based on which along with my primary question gives a single unique row.
I have tried something along the following lines which works but it seems that I should be able to use something bette. It would be great if there were some kind of Restriction.Max("Avtal")
var result = Session.CreateCriteria(typeof(Avtal))
.Add(Restrictions.Eq("Avtal", avtal))
.Add(Restrictions.Eq("Versionsnummer",
Session.CreateCriteria((typeof(Avtal)))
.Add(Restrictions.Eq("Avtal", avtal))
.SetProjection(Projections.Max("version"))
.UniqueResult<int>()))
.List<Avtal>();
Any pointer in the right direction will be very helpful and NO I do not want to use CreateQuery, write HQL directly or something like that, we use Critierias and want to stick to that.
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我在寻找相同的东西时遇到了你的问题,然后又遇到了这个:
var 结果 = Session.CreateCriteria(typeof(Avtal))
.Add(Order.Desc("Versionsnummer")) // 排序并取第一个
.UniqueResult()))
。列表();
I ran across your question when looking for the same thing, then ran across this later on:
var result = Session.CreateCriteria(typeof(Avtal))
.Add(Order.Desc("Versionsnummer")) // sort it and take the first one
.UniqueResult()))
.List();