NHibernate hql 元组结果

NHibernate hql tuple result

hql = "select f, b from Foo f, Bar b"

var resultList = session.CreateQuery(hql).List<object[]>();

结果列表项是一个数组,其中 [0] 是 Foo 类型,[1] id 是 Bar 类型

有没有办法使用 Tuple(或其他通用 class )作为 object[] 的通用参数,这样就可以跳过转换?

是的,你可以,比如:

// The new Tuple<Foo, Bar>(foo, bar) constructor
Type constructor = typeof(Tuple<Foo, Bar>).GetConstructors()[0];

然后

.SetResultTransformer(Transformers.AliasToBeanConstructor(constructor));

.List()

之前

附录

我查看了 我的 代码(因为我在一两年前就已经这样做了 :)),我注意到我更喜欢

Type constructor = typeof(Tuple<Foo, Bar>).GetConstructor(new[] { typeof(Foo), typeof(Bar) });

对此有一个非常好的推理:现在(从 .NET 4.5.1 开始)Tuple<T1, T2> 有一个 public 构造函数,即 new Tuple(T1 t1, T2 t2)没有隐式或显式保证在.NET的未来版本中不会有Tuple<T1, T2>的无参数public构造函数return 一个 "empty" 元组。较长的 GetConstructor 形式保证 "right" 构造函数将始终被采用。