2010-12-04 3 views
0

Я использую NHibernate для веб-приложения. У меня есть модель, как это:Подзапрос для извлечения свойства NHibernate

public class ProductViewModel { 
    public virtual int Id { get; set; } 
    /* others simple properties */ 

    public virtual IList<OfferViewModel> LastOffers { get; set; } 

    public ProductViewModel() { } 
} 
public class OfferViewModel { 
    public virtual string UserName { get; set; } 
    public virtual decimal Prince { get; set; } 

    public OfferViewModel() { } 
} 

Я хотел бы знать, как извлечь сбор имущества «LastOffers» с подзапроса HQL? Я хочу получить его с 10 самыми последними предложениями. Я правильно настроил свою модель, но я не знаю, как sintax выполняет подзапрос, чтобы получить это свойство.

Сегодня, я использую такую ​​команду, чтобы принести мои ViewModel:

public IList<ProductViewModel> GetProductsForSalles() 
     { 
      return 
       Session.CreateQuery(@"select p.Id as Id, 
              p.Name as Name, 
              p.Price as Price, 
              p.Price as Date 
              /* FETCH LastOffers? */ 
             from Product p 
             where p.Active=true and (p.Status=:Status) 
             order by a.Date asc") 
        .SetParameter("Status", Status.Started) 
        .SetMaxResults(50) 
        .SetResultTransformer(Transformers.AliasToBean<ProductViewModel>()) 
        .List<ProductViewModel>(); 
     } 

Спасибо!

ответ

1

Основываясь на приведенном вами описании, я думаю, вам нужно загрузить набор продуктов с предустановленными последними предложениями, соединенными с продуктами FK. Приведенный ниже код должен это сделать:

return Session.CreateCriteria(typeof(ProductViewModel), "p") 
    .CreateCriteria("p.LastOffers", "lastoffers") 
    .SetResultTransformer(new NHibernate.Transform.DistinctRootEntityResultTransformer()) 
    .Add(Restrictions.Eq("p.Active", true)) 
    .Add(Restrictions.Eq("p.Status", Status.Started)) 
    .SetMaxResults(50) 
    .List<ProductViewModel>(); 

не семенники, но идея состоит в том, что мы объединяем две таблицы, и результат будет «развалился» к каждой строке продукта (по DistinctRootEntityResultTransformer)

Извините, что пример не в HQL - я предпочитаю Criterias и QueryOver <> как более стабильный.

+0

Hello Genius, Спасибо за awser. На самом деле, DistinctRootEntityResult shoul разрешает мою проблему :), но есть ли способ получить свойство с 10 самыми лучшими записями и заказать по id desc? Я хочу, чтобы это улучшило производительность, потому что у меня будет много предложений на продукт. Еще раз спасибо! – 2010-12-06 11:38:00

Смежные вопросы