Sas*_*sha 4 nhibernate fluent max fluent-nhibernate
我需要从数据库中获取最大页面顺序:
int maxOrder = GetSession.Query<Page>().Max(x => x.PageOrder);
Run Code Online (Sandbox Code Playgroud)
上面的工作如果数据库表中有行,但当表为空时我得到:
Value cannot be null.
Parameter name: item
Run Code Online (Sandbox Code Playgroud)
tol*_*sm7 14
在你正在做的方式中,获取异常作为可枚举是正常的,GetSession.Query<Page>()返回是空的(因为表是空的,如你所提到的).
您应该得到的例外是:Sequence不包含任何元素.你在你的问题提的例外是因为该项目的变量(这是不相关的其它NHiberanate查询你上面所列内容)为空(第54行指定的项目属性设置为null).
从表中的属性获取最大值的更安全的方法如下:
var max = GetSession.CreateCriteria<Page>()
.SetProjection(Projections.Max("PageOrder"))
.UniqueResult();
Run Code Online (Sandbox Code Playgroud)
或者使用带有NHibenrate 3.0的QueryOver:
var max = GetSession.QueryOver<Page>()
.Select(
Projections
.ProjectionList()
.Add(Projections.Max<Page>(x => x.PageOrder)))
.List<int>().First();
Run Code Online (Sandbox Code Playgroud)
如果表为空,您将获得max = 0
Session.Query<Page>().Max(x => (int?)x.PageOrder)
Run Code Online (Sandbox Code Playgroud)
注意演员表(我假设PageOrder是一个int)
如果您通过tolism7(InvalidCastException)遇到QueryOver示例问题,那么我的工作方式如下:
var max = session.QueryOver<Page>()
.Select(Projections.Max<Page>(x => x.PageOrder))
.SingleOrDefault<object>();
return max == null ? 0 : Convert.ToInt32(max);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13534 次 |
| 最近记录: |