Выполнить пользовательский запрос в nhibernate и сопоставить с объектом пользовательского домена - PullRequest
5 голосов
/ 07 марта 2012

Привет, у меня есть такой запрос

SELECT Customer.Name, sum([Load].Profit) as Profit FROM Customer INNER JOIN [Load] ON Customer.Id = [Load].CustomerId GROUP BY Customer.Name

Мне нужно выполнить этот запрос в nhibernate и сопоставить его с объектом Custom домена, который я создал как этот

public class CustomerProfit
    {
        public String Name;
        public Decimal Profit;

    }

Возможно ли это сделать?и как, или можно выполнить этот пользовательский запрос в HQL?

1 Ответ

14 голосов
/ 08 марта 2012
public sealed class CustomerProfitQuery : IResultTransformer
{
    public static readonly string Sql = "SELECT Customer.Name, sum([Load].Profit) as Profit FROM Customer INNER JOIN [Load] ON Customer.Id = [Load].CustomerId GROUP BY Customer.Name";
    public static readonly CustomerProfitQuery Transformer = new CustomerProfitQuery();

    // make it singleton
    private CustomerProfitQuery()
    { }

    public IList TransformList(IList collection)
    {
        return collection;
    }

    public object TransformTuple(object[] tuple, string[] aliases)
    {
        return new CustomerProfit
        {
            Name = (string)tuple[0],
            Profit = (decimal)tuple[1],
        };
    }
}


// usage
var customerprofits = session.CreateSQLQuery(CustomerProfitQuery.Sql)
    .SetResultTransformer(CustomerProfitQuery.Transformer)
    .List<CustomerProfit>()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...