NHibernate QueryOver父对象

时间:2014-05-15 15:19:05

标签: linq nhibernate queryover

我有一个包含两个类的模型:

public class Category
{
  public int Id { get; set; }
  public string Name { get; set; }
  public List<Product> { get; set; }  
}

public class Product
{
   public string Name { get; set; }
   public string Code { get; set; }
   public decimal Amount { get; set; }

}

,在数据库中的两个不同表中表示。

如何使用QueryOver&lt;&gt;根据类别及其金额查询产品,最后选择产品。

在实体框架中,我会写一些类似的东西:

context.Categories.Where(s=>s.Id == @1)
                  .Select(s=>s.Products)
                  .Where(s=>s.Amount>12333).ToList();

OR

context.Products.Where(s=>s.**Category**.Id == @1 && s.Amount > 12333).ToList();

1 个答案:

答案 0 :(得分:1)

首先,你应该(几乎必须)扩展从产品到类别的关系:

public class Product
{
   ...
   public Category Category { get; set; }

它已经存在于DB中,因此没有理由将其隐藏在POCO实体中。

然后,如文档中所述:

我们可以这样做:

var results = session
   // here we get query related to Product
   .QueryOver<Product>()
     // here we filter Product
     .And(p => p.Amount > 12333)
   // here we join the Category
   .JoinQueryOver(p => p.Category)
     // and do some farther filtering
     .Where(c => c.Id == 1)
   // list of products
   .List<Product>()