2012-11-07 14 views
0

我有2個表,我想在結果類中放置一些字段,但我卡住了。我想是這樣的實體框架代碼:NHibernate,連接表和返回特定類型

var res = 
(from p in context.EstimationItem 
    join q in ... 
    select new EstimationWithDetail 
    { 
     Estimation = q.Estimation, 
     Id = q.Id, 
     FullName = q.Customer.FirstName + q.Customer.LastName 

    }).ToList(); 

在Nibernate,在這個時候,我都這樣了,但我堅持......

var res = 
    Session.QueryOver<EstimationItem>() 
    .JoinQueryOver(x => x.Estimation) 
    .Select(
     x => x.Estimation.Reference, 
     x => x.Estimation.CreationDate, 
     x => x.Price, 
     x => x.Estimation.Customer.FirstName, 
     x => x.Estimation.Customer.LastName 
     ) 
    .List(); 

public class Estimation 
{ 
    public virtual string Reference { get; set; } 
    public virtual Customer Customer { get; set; } 
    public virtual DateTime CreationDate { get; set; } 
    public virtual decimal Total { get; set; } 
    public virtual IList<EstimationItem> EstimationItems { get; set; } 
} 

public class EstimationItem 
{ 
    public virtual decimal Price { get; set; } 
    public virtual int Quantity { get; set; } 
    public virtual Estimation Estimation { get; set; } 
    public virtual Product Product { get; set; } 
} 

public class EstimationWithDetail 
{ 
    public string Reference { get; set; }  //Estimation.Reference 
    public string FullName { get; set; }  //concat FirstName and LastName from Customer 
    public decimal Price { get; set; }   //Estimation.Total 
    public int Id { get; set; }     //Estimation.Id 
    public DateTime CreationDate { get; set; } //Estimation.CreationDate 
} 

更新1

我試過了代碼,但是我得到這個錯誤: InvalidOperarionException,類型'EstimationItem'的變量'x'引用範圍'',但沒有定義

var res = 
    Session.QueryOver<EstimationItem>() 
    .JoinQueryOver(x => x.Estimation) 
    .Select(x => new EstimationWithDetail 
    { 
     Code = x.Estimation.Reference, 
     CreationDate = x.Estimation.CreationDate, 
     Price = x.Estimation.Total, 
     FullName = x.Estimation.Customer.FirstName + x.Estimation.Customer.LastName 
    }) 
    .List<EstimationWithDetail>(); 

更新2: 我想這太

Estimation a = null; 
Customer b = null; 
var res = Session.QueryOver<EstimationItem>() 
    .JoinAlias(c => c.Estimation,() => a) 
    .JoinAlias(c => c.Estimation.Customer,() => b) 
    .Select(x => new EstimationWithDetail 
    { 
     Code = a.Reference, 
     Id = a.Id, 
     FullName = b.LastName 
    }) 
    .List<EstimationWithDetail>(); 
+0

我也有這個問題。如果我移動'.Select'到'的.List <...>()'它的工作原理後,但隨後的SQL選擇將選擇所有列,而旗下的J最後,我(我想我們)試圖避免。你有沒有找到解決方案? – Markus

回答

0

我不是很熟悉的LINQ提供程序NHibernate的,因爲我還沒有使用它,但你不能做的事像這樣:

var res = Session.QueryOver<EstimationItem>() 
    .JoinQueryOver(x => x.Estimation) 
    .Select(x => new EstimationWithDetail 
    { 
     Estimation = x.Estimation, 
     Id = x.Id, 
     FullName = x.Estimation.Customer.FirstName + x.Estimation.Customer.LastName 

    }) 
    .List(); 
+0

我試過了,結果update1。 –