我目前正在开发一个项目,使用NHiberate作为DAL,使用.NET 2.0和NHibernate 2.2。
今天我来到了一个点,我必须加入一堆实体/集合来获得我想要的东西。那样就好。
我得到的是,我不希望查询返回某个实体类型的对象列表,而是结果将包含来自不同实体的各种属性。
以下查询不是我正在做的事情,但这是我在这里讨论的一种查询。
select order.id, sum(price.amount), count(item)
from Order as order
join order.lineItems as item
join item.product as product,
Catalog as catalog
join catalog.prices as price
where order.paid = false
and order.customer = :customer
and price.product = product
and catalog.effectiveDate < sysdate
and catalog.effectiveDate >= all (
select cat.effectiveDate
from Catalog as cat
where cat.effectiveDate < sysdate
)
group by order
having sum(price.amount) > :minAmount
order by sum(price.amount) desc
我的问题是,在这种情况下应该返回什么类型的结果?它当然不是Order类型,也不是LineItems类型。
感谢您的帮助!
约翰
答案 0 :(得分:2)
你总是可以使用List of object []来返回数据,它可以正常工作。
答案 1 :(得分:1)
这称为投影,只要您指定包含来自各个表的行的显式select子句(甚至来自单个表的聚合/摘要数据),就会发生这种情况。
使用LINQ,您可以创建匿名对象来存储这些数据行,如下所示:
var crunchies = (from foo in bar
where foo.baz == quux
select new { foo.corge, foo.grault }).ToList();
然后你可以做crunchies[0].corge
例如拉出行和&amp;列。
如果您使用的是NHibernate.Linq,这将“正常工作”。
如果你正在使用HQL或Criteria API,那么Fahad提到的将会起作用。结果会得到List<object[]>
,并且数组的索引引用您在select子句中返回的列的顺序。