使用Lambda查询集合/联接表

本文关键字:集合 Lambda 查询 使用 | 更新日期: 2023-09-27 17:53:07

我有一个lambda 'where'查询,查询Order表如下:

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'

谁能帮我用正确的语法?

使用Lambda查询集合/联接表

您可以在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();

既然你知道Id of order看起来没什么用但是像这样的

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