NHibernate返回值

时间:2010-06-04 21:43:45

标签: nhibernate return-value

我目前正在开发一个项目,使用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类型。

感谢您的帮助!

约翰

2 个答案:

答案 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子句中返回的列的顺序。