Nhibernate сумма / групповой вопрос - PullRequest
0 голосов
/ 26 февраля 2011
CREATE TABLE [dbo].[OrderHistory](
    [RecordID] [int] IDENTITY(1,1) NOT NULL,
    [UserID] [int] NOT NULL, /* FK to user table*/
    [ItemID] [int] NOT NULL, /* FK to Item table */
    [PurchaseDate] [datetime] NOT NULL,
    [UnitPrice] [money] NOT NULL,
    [Quantity] [float] NOT NULL,
PRIMARY KEY CLUSTERED 
(
    [RecordID] ASC
) ON [PRIMARY]

У меня есть таблица для сохранения истории заказов пользователей.Мне нужно рассчитать общие деньги, потраченные пользователем на ежегодной основе.Если я напишу SQL-запрос напрямую, он будет очень простым и понятным:

select SUM(UnitPrice * Quantity) as TotalAmount, DATEPART(yyyy, PurchaseDate)
from OrderHistory
where UserId = 1
group by DATEPART(yyyy, PurchaseDate)

Планируемая объектная модель:

public class YearlySummary {
        public virtual int Year {
            get;
            set;
        }

        public virtual decimal TotalSpent {
            get;
            set;
        }
    }

Но как мне это сделать в Nhibernate?

Спасибо, Харди

Ответы [ 2 ]

0 голосов
/ 18 августа 2011

Если вам нужно только получить (исторические) данные, это довольно просто.Используйте формулу в вашем файле сопоставления:

<property name="TotalSpent" formula="UnitPrice * Quantity" type="Decimal" />

Это умножит два значения в запросе (например, выберите UnitPrice * Количество из OrderHistory) и поместит результат в свойство TotalSpent.Обратите внимание, что это не будет работать для временных объектов, пока вы не сохраните данные.

0 голосов
/ 27 февраля 2011

Вы можете сделать это, используя Linq.

Вы должны сделать что-то следующим образом:

из orderHistory в группе Session.Linq.orderHistory.PurchaseDate в g выберите новый {TotalAmount = g.Sum (orderHistory.UnitPrice * orderHistory.Quantity)}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...