2 つのテーブルがあり、いくつかのフィールドを結果クラスに配置したいのですが、行き詰まっています。必要なコードは、Entity Framework で次のようになります。
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、変数 'x' 型 'EstimationItem' がスコープ '' から参照されましたが、定義されていません
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>();