我需要从数据库中获取最大的页面顺序:如何在NHibernate中选择最大值?
int maxOrder = GetSession.Query<Page>().Max(x => x.PageOrder);
上述工程是否有数据库中的表行,但是当表为空我越来越:
Value cannot be null.
Parameter name: item
我需要从数据库中获取最大的页面顺序:如何在NHibernate中选择最大值?
int maxOrder = GetSession.Query<Page>().Max(x => x.PageOrder);
上述工程是否有数据库中的表行,但是当表为空我越来越:
Value cannot be null.
Parameter name: item
Session.Query<Page>().Max(x => (int?)x.PageOrder)
注投(我假设PageOrder是一个int)
在您正在执行的方式是正常的,因为枚举类型为GetSession.Query<Page>()
返回的结果是空的(因为表格是空的,因为您提到过)。
您应该得到的异常是:序列不包含任何元素。 在你的问题中提到的异常是因为item变量(与上面列出的NHiberanate查询无关)为空(第54行将item属性指定为null)。
一个更安全的方式来获得一个表中的财产最高应为以下:
var max = GetSession.CreateCriteria<Page>()
.SetProjection(Projections.Max("PageOrder"))
.UniqueResult();
或使用QueryOver与NHibenrate 3.0:
var max = GetSession.QueryOver<Page>()
.Select(
Projections
.ProjectionList()
.Add(Projections.Max<Page>(x => x.PageOrder)))
.List<int>().First();
如果表是空的,你会获得最大的= 0
如果您有由tolism7(InvalidCastException的)与QueryOver例题,这里就是我得到了它的工作:
var max = session.QueryOver<Page>()
.Select(Projections.Max<Page>(x => x.PageOrder))
.SingleOrDefault<object>();
return max == null ? 0 : Convert.ToInt32(max);
感谢ü了很多!有可能使用它的强类型版本? :) – Sasha 2011-01-21 13:00:23
如果您使用NHibernate 3.0,则可以使用QueryOver。我编辑了我的答案,在QueryOver中添加了一个版本。 – tolism7 2011-01-21 13:45:32