Nhibernate使用两个表中的select列进行连接

Nhibernate使用两个表中的select列进行连接,nhibernate,select,join,queryover,Nhibernate,Select,Join,Queryover,好的,经过几次尝试,我被困在这一个 我正在使用NHibernate和QueryOver,如下所示。我有一个产品和产品评论 public class Product { .... public virtual IList<ProductReview> CustomerReviews {get;set;} .... } public class ProductReview { .... public virtual Product Product {get;set;} ..

好的,经过几次尝试,我被困在这一个

我正在使用NHibernate和QueryOver,如下所示。我有一个产品和产品评论

public class Product
{
 ....
 public virtual IList<ProductReview> CustomerReviews {get;set;}
 ....
}

public class ProductReview
{
 ....
 public virtual Product Product {get;set;}
 ....
}
问题是

 Product px = null;
 ProductReview rev = null;
var result = CurrentSession
            .QueryOver<ProductReview>()
            .Where(r => r.IsActive && !r.IsDraft)
            .Select(
                Projections.Property<ProductReview>(r => r.Id).WithAlias(() => rev.Id),
                Projections.Property<ProductReview>(r => r.Title).WithAlias(() => rev.Title)
                )
            .OrderBy(r => r.ReviewDate).Desc()
            .TransformUsing(Transformers.AliasToBean<ProductReview>())
            .JoinAlias(r => r.Product, () => px)
            .Select(
               Projections.Property(() => px.UPC).WithAlias(() => px.UPC),
               Projections.Property(() => px.FullName).WithAlias(() => px.FullName)
              )
              .TransformUsing(Transformers.AliasToBean<Product>())
              .Take(5)
              .List();
产品px=null;
ProductReview rev=null;
var结果=当前会话
.QueryOver()
.Where(r=>r.IsActive&!r.IsDraft)
.选择(
Projections.Property(r=>r.Id).WithAlias(()=>rev.Id),
Projections.Property(r=>r.Title).WithAlias(()=>rev.Title)
)
.OrderBy(r=>r.ReviewDate).Desc()
.TransformUsing(Transformers.AliasToBean())
.JoinAlias(r=>r.Product,()=>px)
.选择(
Projections.Property(()=>px.UPC).带有别名(()=>px.UPC),
Projections.Property(()=>px.FullName).WithAlias(()=>px.FullName)
)
.TransformUsing(Transformers.AliasToBean())
.采取(5)
.List();
错误是: 值“Reviews.Models.Product”不是“Reviews.Models.ProductReview”类型,不能在此泛型集合中使用。参数名称:value

我真的不想再创建一个DTO。我想获得最近5次新评论的列表,并填充其产品(两个实体上只需填写几个必填字段)

在NHibernate 3.0中,这是否可以通过任何方式(原始sql除外)实现?

产品px=null;
Product px = null;
ProductReview rev = null;

var result = CurrentSession.QueryOver<ProductReview>()
    .Where(r => r.IsActive && !r.IsDraft)
    .JoinQueryOver(r => r.Product)
    .OrderBy(r => r.ReviewDate).Desc()
    .Take(5)
    .List();
ProductReview rev=null; var result=CurrentSession.QueryOver() .Where(r=>r.IsActive&!r.IsDraft) .JoinQueryOver(r=>r.Product) .OrderBy(r=>r.ReviewDate).Desc() .采取(5) .List();
我确实提到我不想再上一堂DTO课。但无论如何,谢谢你的回答。更新了我的答案以删除DTO。这就是我现在使用的内容,但它会拉取每个实体的所有字段,这对我来说是一种过分的做法。你需要接受你正在使用ORM的事实。您只要求返回部分数据,这违反了原则。
Product px = null;
ProductReview rev = null;

var result = CurrentSession.QueryOver<ProductReview>()
    .Where(r => r.IsActive && !r.IsDraft)
    .JoinQueryOver(r => r.Product)
    .OrderBy(r => r.ReviewDate).Desc()
    .Take(5)
    .List();