2011-06-23 7 views
5

araya getirir. Örneğin bir Sipariş ve satır öğeleri kullanalım. Sipariş bilgilerini ve satır öğelerinin sayısını görüntülemek istiyorum.NHibernate QueryOver seçme varlık ve Ne yapmak istediğiniz varlık verileri içeren bir veri basit ızgara ve bunun çocukların toplu verileri görüntüleyebilir olduğunu

OrderID, OrderDate, NumOfLineItems

Şimdi normalde SQL birçok şekilde yapabiliyor. Fakat bu, NHibernate'e çeviri yaparken işe yarayabileceğini düşünebilmemin tek yoludur.

SELECT o.OrderID, OrderDate, NumOfLineItems 
FROM #Orders o 
INNER JOIN 
(SELECT o2.OrderID, COUNT(*) As NumOfLineItems FROM #LineItems l 
INNER JOIN #Orders o2 ON o2.OrderID = l.OrderID 
WHERE UserID = 1 GROUP BY o2.OrderID) t1 ON o.OrderID = t1.OrderID 
WHERE UserID = 1 

ben başka yolları da vardır biliyorum ama NHibernate bana QueryOver sözdizimi kullanılarak yapmanızı sağlayacaktır yollarını düşünmek çalışıyorum. Türetilmiş sütun kullanmak istemiyorum. SQL yazmayı denemeye çalışıyorum.

Kuruluşlarım için bir Emir varlığım ve bu durumda benim DTO'm olan bir ToplanmışOrder varlığım var ve verileri kopyalamak için transformatör aliastobean'ı kullanmayı düşünüyorum.

Bunun nasıl çözüleceğine dair hiçbir fikrim yok.

Tüm

var bugüne kadar:

 QueryOver<LineItem> x = QueryOver.Of<LineItem>() 
      .SelectList(p => p .SelectCount(l => l.Id).WithAlias(() => itemAlias.NumOfLineItems)) 
      .JoinQueryOver<Order>(l => l.Order) 
      .Where(o => o.UserID == userID) 


     var y = session.QueryOver<Listing>() 
      .JoinQueryOver<Bid>(x); // no idea whats going on here 

cevap

5

Verilen:

OrderDto orderDto = null; 
LineItem items = null; 
var results = session.QueryOver<Order>() 
    .JoinAlias(o => o.LineItems,() => items) 
    .Select(Projections.ProjectionList() 
     .Add(Projections.Property<Order>(o=>o.Id).WithAlias(()=>orderDto.OrderId)) 
     .Add(Projections.Property<Order>(o=>o.DateOrdered).WithAlias(()=>orderDto.DateOrdered)) 
     .Add(Projections.Count(()=> items.Id).WithAlias(()=>orderDto.ItemCount)) 
    ) 
    .TransformUsing(Transformers.AliasToBean<OrderDto>()) 
    .List<OrderDto>(); 
+1

:

public class Order { public virtual int OrderId {get; set;} public virtual DateTime OrderDate {get; set;} public virtual IList<LineItem> LineItems {get; set;} } public class LineItem { public virtual int Id {get; set;} public virtual string Description {get; set;} } 

QueryOver API'si aşağıdakileri yapabilirsiniz kullanarak al + Toplu LineItem hakkında bir tahminde sorgulamak için Peki bu cesaret kırıcı. Her bir sütunu belirtmek zorunda kalmak bir kabus olacak =) – BradLaney

+0

@ user745537 Evet Bunun bir acı olacağını düşünebilirim. Başka bir çözüm bulabileceğimi göreceğim. –

+0

@ user745537 Bunu düşünmek için biraz zaman geçirdim ve istediğini yapmanın bir yolunu bilmiyorum. Bir başka olası çözüm ise iki sorgu kullanmak (bir tanesi, birleşik sayım için bir tane) kullanmak ve bunları LINQ kullanarak bellekte birleştirmek olabilir. –

İlgili konular