【发布时间】:2015-08-04 20:56:43
【问题描述】:
我在 Forecast.hbm.xml 中定义了以下命名查询:
SELECT
c.ForecastedYear,
s.Description,
Sum(c.NumTrees) AS NumTrees
FROM
EcoForecasts AS f INNER JOIN
(EcoForecastCohorts AS c INNER JOIN EcoStrata AS s ON s.StrataKey = c.StratumKey)
ON f.ForecastKey = c.ForecastKey
WHERE
f.ForecastKey = :guid
GROUP BY
c.ForecastedYear,
c.StratumKey,
s.Description
ORDER BY
s.Description,
c.ForecastedYear;
我在 C# 文件 NumTreesByStrataReport.cs 中这样调用查询:
IList<Result> results = _input.GetNamedQuery("NumTreesByStrata")
.SetGuid("guid", _iSess.ForecastKey.Value)
.List<object[]>()
.Select(result => new Result {
Year = Convert.ToInt16(result[0]),
Strata = Convert.ToString(result[1]),
NumTrees = Convert.ToInt64(result[2])
})
.ToList();
return results;
但是,此代码会抛出 IndexOutOfRangeException,因为 .List<object[]>() 部分返回的对象数组列表只有 3 个元素。未返回 s.Description 字段。
如果我在我的数据库引擎 (Microsoft Access) 中运行 SQL 查询,则会返回所有 3 列。为什么 NHibernate 不能做数据库可以做的事情并返回所有选定的字段?
【问题讨论】:
-
您是否分析过 NHibernate 生成的 SQL?
标签: c# ms-access nhibernate group-by named-query