猿问

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

调用本机 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 列表?


UYOU
浏览 259回答 2
2回答

慕慕森

当你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){&nbsp; &nbsp;if (item != null)&nbsp; &nbsp; &nbsp; ids.Add(Convert.ToInt32(item));}如果这是 nhibernate 范围上的映射表,则可以使用 LINQ 来执行此操作,例如:var ids = session.Query<SomeEntity>().Select(x => x.Id).ToList();
随时随地看视频慕课网APP
我要回答