2016-10-03 3 views
0

Пожалуйста, помогите мне со следующим вопросом:Group By с NHibernate 2.2

Я работаю с NHibernate 2.2, VS 2008 и MySQL Db.

У меня есть рабочий SQL скрипт:

select s.name, count(o.id) from orders o 

inner join writers w 

    on o.assigned_to = w.id 

inner join sites s 

    on s.id = w.site_id 

where o.date between '2014-09-22 00:00:00' and '2014-09-29 00:00:00' 

group by s.name 

Я пытаюсь реализовать его с NHibernate 2.2:

var collection = NHibernateManager.Session.CreateCriteria(typeof(Writers.Domain.Order),() => orderAlias) 
       .CreateAlias(() => orderAlias.AssignedWriter,() => writerAlias, JoinType.InnerJoin) 
       .CreateAlias(() => writerAlias.Site,() => siteAlias, JoinType.InnerJoin) 
       .Add(() => writerAlias.RegDate > period.From) 
       .Add(() => writerAlias.RegDate < period.To) 
       .SetProjection(Projections.ProjectionList() 
        .Add(Projections.GroupProperty(ReflectionHelper.GetMemberName((Site s) => s.Name))) 
        .Add(Projections.Count(ReflectionHelper.GetMemberName((Writers.Domain.Order o) => o.OrderId)), "OrderId") 
       ).List(); 

Но я всегда получаю следующее сообщение об ошибке:

Could not resolve property: Name of Writers.Domain.Order.

enter image description here

Пожалуйста, помогите с решением этой проблемы.

ответ

0

Ошибка, которую вы получаете, заявляет, что объект Writers.Domain.Order не имеет свойства, называемого Name. У вашего объекта Writers.Domain.Order есть свойство Name? В таблице orders в вашей базе данных есть столбец Name? Если любой из них отсутствует, вы можете получить такую ​​ошибку.

+0

Конечно, у предмета заказа нет никакого свойства «Имя». Но я группирую свойство «Имя» сайта. И объект сайта имеет это свойство. Я вижу, что я могу использовать только свойства Order в проекции. Но как быть, если мне нужно использовать свойства других объектов домена, таких как «Сайт» в моем примере? – Askold