调用本机 SQL 返回具有 ISession 对象的标量值列表(在我的情况下为整数)的最佳/最干净的方法是什么?我正在尝试运行以下命令,但总是遇到一些错误:var query = _session.CreateSQLQuery("SELECT Id FROM SomeTable");A. var ids = query.List<int>(); // <-- throws ArgumentNullException "Value cannot be null.\r\nParameter name: item"B. var ids = query.List(); returns one element array with no valid information.C. query.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean<int>());var ids = query.List<int>(); // throws PropertyNotFoundException: "Could not find a setter for property 'Id' in class 'System.Int32'"有没有一种方法可以在不创建仅包含一个名为 Id 的 int 属性的实体类的情况下检索 int 列表?
2 回答
慕慕森
TA贡献1856条经验 获得超17个赞
当你List从CreateSQLQuery你那里打电话时,你会得到一个实例,IList它在内部是一个List<object>. 如果此结果有空值,则无法转换为 ,int因为它是值类型。因此,一个解决方案是迭代结果并在它是有效整数时进行转换。样品:
var values = _session.CreateSQLQuery("SELECT Id FROM SomeTable").List();
var ids = new List<int>();
foreach (var item in values)
{
if (item != null)
ids.Add(Convert.ToInt32(item));
}
如果这是 nhibernate 范围上的映射表,则可以使用 LINQ 来执行此操作,例如:
var ids = session.Query<SomeEntity>().Select(x => x.Id).ToList();
- 2 回答
- 0 关注
- 258 浏览
添加回答
举报
0/150
提交
取消