为了账号安全,请及时绑定邮箱和手机立即绑定

NHibernate:如何使用 CreateSQLQuery 返回标量值列表(从一列)?

NHibernate:如何使用 CreateSQLQuery 返回标量值列表(从一列)?

C#
UYOU 2021-10-09 16:56:42
调用本机 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();


查看完整回答
反对 回复 2021-10-09
  • 2 回答
  • 0 关注
  • 258 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信