2012-07-18 171 views
1

我有这样的SQL查询:SQL查询加入NHibernate的与QueryOver

select pr.*, det.Description, det.Name 
from Product pr 
inner join ProductDetail det on det.Product_id = pr.id 
where pr.Id = XX and det.IsDefault = yy 

我怎样才能做到这一点与QueryOver?

感谢,

更新: “公关*”

public ProductMap() 
{ 
    Id(x => x.Id).GeneratedBy.Native(); 
    Map(x => x.Code) 
     .Length(20) 
     .Not.Nullable(); 
    Map(x => x.CreationDate).Not.Nullable(); 
    Map(x => x.IsDeleted); 
    Map(x => x.Price); 
    HasManyToMany(x => x.Categories) 
     .AsSet() 
     .Cascade 
     .SaveUpdate() 
     .Table("ProductsCategories"); 
} 

public class ProductDetailMap : ClassMap<ProductDetail> 
{ 
    public ProductDetailMap() 
    { 
     Id(x => x.Id).GeneratedBy.Native(); 
     Map(x => x.Name) 
      .Length(50) 
      .Not.Nullable(); 
     Map(x => x.Description) 
      .Length(250); 
     Map(x => x.IsDefault); 
     References(x => x.Language); 
     References(x => x.Product); 
    } 
} 
+0

什么类型你想出去吗? – 2012-07-18 22:32:09

+0

@AndrewWhitaker匿名类型。 – 2012-07-19 03:42:08

回答

2

据我所知QueryOver没有等价的一部分,这将是很好的。 这意味着你将不得不在你的查询中手动指定pr的每个属性。

查看文档here

节“预测”但它会是这样的:

Product productAlias = null; 
ProductDetail productDetail = null; 
var query = session.QueryOver(() => productAlias) 
        .Inner.JoinAlias(() => productAlias.ProductDetails,() => productDetail) 
        .Where(() => productAlias.Id == XX && productDetail.IsDefault == YY) 
        .SelectList(list => list 
         .Select(() => productAlias.Id) 
         .Select(() => productAlias.Property1) 
         .Select(() => productAlias.Property2) 
         // and so on... 
         .Select(() => productDetail.Description) 
         .Select(() => productDetail.Name) 
        ); 

// One way of doing it... 
// Will give you a list of object arrays matching the result 
var results1 = query.List<object[]>(); 

// Another way... 
// You need to define a class that has all the properties your are querying for 
// If we create a class like that called "MySummaryClass" you can do: 
var results2 = query.TransformUsing(Transformers.AliasToBean<MySummaryClass>()).List<MySummaryClass>(); 
+0

嗯,做两个查询比较容易,然后在合并后使用linq,这是工作正常 – 2012-07-19 16:27:39