我有一份订单清单。
我想根据一组订单状态选择订单。
本质上就是选择顺序。StatusCode在(“A”,“B”,“C”)
// Filter the orders based on the order status
var filteredOrders = from order in orders.Order
where order.StatusCode.????????("A", "B", "C")
select order;
注:这是对象的LINQ,我不是100%确定它是否适用于实体的LINQ,现在没有时间检查它。事实上,把它转换成[A, B, C]中的x并不太难,但你必须自己检查。
因此,取代Contains作为????的替代品在你的代码中,你可以使用更LINQ-uish的Any:
// Filter the orders based on the order status
var filteredOrders = from order in orders.Order
where new[] { "A", "B", "C" }.Any(s => s == order.StatusCode)
select order;
它与您从SQL中了解的相反,这就是为什么它不是那么明显的原因。
当然,如果你喜欢流畅的语法,这里是:
var filteredOrders = orders.Order.Where(order => new[] {"A", "B", "C"}.Any(s => s == order.StatusCode));
这里我们再次看到LINQ的一个惊喜(像Joda-speech,它把选择放在最后)。然而,从这个意义上说,它检查列表(set, collection)中是否至少有一个项(即any)与单个值匹配是非常合乎逻辑的。