2013-01-15 70 views
0

我有一個拉姆達「其中」查詢,查詢訂單表是這樣的:使用lambda查詢收集/連接表

List<Order> returnedOrders = _session.Query<Script>()Where(s => s.orderId == orderIdParam).ToList(); 

我還需要檢查的相關OrderDetails表中的列的值。所以returnedOrdersOrderDetails的集合,即returnedOrders.orderDetails

所以SQL查詢看起來是這樣的:

Where OrderId = 12345 and Order.OrderDetail.CreatedDate = '01-Jan-2013' 

誰能幫我用正確的語法嗎?

回答

1

可以使用邏輯與(&&)的Where方法內:

var date = new Date(2013,1,1); 

List<Order> returnedOrders = 
    _session.Query<Script>() 
      .Where(s => 
       s.orderId == orderIdParam && 
       s.OrderDetails.Any(d => d.CreatedDate == date)) 
      .ToList(); 

,您也可以附加另一Where方法。

var date = new Date(2013,1,1); 

List<Order> returnedOrders = 
    _session.Query<Script>() 
      .Where(s => s.orderId == orderIdParam) 
      .Where(s => s.OrderDetails.Any(d => d.CreatedDate == date)) 
      .ToList(); 
+0

這就是我想,但我不智能感知得到ORDERDETAILS的列名。 s.Orderdetails是一個IList它有幫助,所以我得到像s.Orderdetails.Remove,s.Orderdetails.First等列表操作。 – vinnyh

+0

@vinnyh我改變了它。它現在工作嗎? –

0

你既然知道編號的順序似乎無用,但像這樣

from order in orders 
from detail in order.Details 
where 
    order.Id = orderId && 
    order.Id == detail.OrderId && 
    detail.CreateDate == createDate 
select order