Возвращаемые значения NHibernate - PullRequest
1 голос
/ 05 июня 2010

В настоящее время я работаю над проектом, использующим 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.

Спасибо за вашу помощь!

John

Ответы [ 2 ]

2 голосов
/ 05 июня 2010

вы всегда можете использовать Список объекта [] для возврата данных, и он будет работать нормально.

1 голос
/ 05 июня 2010

Это называется проекцией, и это происходит каждый раз, когда вы указываете явное предложение выбора, которое содержит строки из различных таблиц (или даже сводные / сводные данные из одной таблицы).

Используя LINQ, вы можете создавать анонимные объекты для хранения этих строк данных, например:

var crunchies = (from foo in bar
                where foo.baz == quux
                select new { foo.corge, foo.grault }).ToList();

Затем вы можете сделать crunchies[0].corge, например, чтобы вытащить строки и столбцы.

Если вы используете NHibernate.Linq, это будет "просто работать".

Если вы используете HQL или Criteria API, то упомянутый Фахад будет работать. В результате вы получите List<object[]>, а индекс массива ссылается на порядок столбцов, которые вы вернули в предложении select.

...