我有“Orders”表,其主键是“OrderId”:
OrderId | OrderName
------- | ----------
1 | Order X
2 | Order Y
3 | Order Z
和“OrderDetails”表,其主键是“OrderDetailsId”外键是'OrderId':
OrderDetailsId | OrderId | ItemId | DeliveryDate
-------------- | ------- | ------ | ------------
10 | 1 | AA | 1/1/2010
20 | 1 | BB | 1/1/2013
30 | 2 | CC | 1/1/2012
40 | 2 | CC | 1/1/2014
每个订单都有零或更多订单详细信息,每个订单明细都有具体的交货日期。
我们希望获得所有订单,无论是否有订单明细,如果订单明细具有最大“交货日期”,则只标记一个订单作为VIP
这是预期的输出:
OrderId | OrderName | IsVIP
------- | --------- | -----
1 | Order X | NO
2 | Order Y | YES
3 | Order Z | NO (since it has no order details)
那是因为OrderDetailsId = 40的最大交货日期属于OrderId = 2
如何使用最易读的LINQ代码实现此目的
答案 0 :(得分:3)
我不确定你是否在map.on('singleclick', myfunc);
var myfunc = function(evt) {
map.getTargetElement().style.cursor = 'wait';
// do some lengthy processing
map.getTargetElement().style.cursor = 'pointer';
}
集合中拥有OrderDetails
属性(如果是,那么@ juharr的答案是正确的)。但是,如果不是,那么你可以像这样使用orders
: -
group join
以下是Fiddle var result = from o in orders
join od in orderDetails
on o.OrderId equals od.OrderId into g
select new {
OrderId = o.OrderId,
OrderName = o.OrderName,
IsVIP = g.Any(x => x.DeliveryDate == orderDetails.Max(z => z.DeliveryDate))
? "Yes" : "No"
};
的示例。
答案 1 :(得分:2)
使用导航属性。请注意,对于包含最大投放日期的订单明细的所有订单,这会将IsVIP
设置为“是”。
var query = from order in db.Orders
select new
{
order.OrderId,
order.Name,
IsVIP = order.OrderDetails.Any(
od => od.DeliveryDate == db.OrderDetails.Max(x => x.DeliveryDate))
? "YES"
: "NO"
};