Linqselect列表中存在IN(A,B,C)的对象

我有一个orders清单。
我想根据一组订单状态来selectorders

所以本质上select orders where order.StatusCode in ("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; 

非常感谢。

你的状态码也是一个集合,所以使用Contains

 var allowedStatus = new[]{ "A", "B", "C" }; var filteredOrders = orders.Order.Where(o => allowedStatus.Contains(o.StatusCode)); 

或者在查询语法中:

 var filteredOrders = from order in orders.Order where allowedStatus.Contains(order.StatusCode) select order; 
 var statuses = new[] { "A", "B", "C" }; var filteredOrders = from order in orders.Order where statuses.Contains(order.StatusCode) select order; 

尝试使用Containsfunction;

确定序列是否包含指定的元素。

 var allowedStatus = new[]{ "A", "B", "C" }; var filteredOrders = orders.Order.Where(o => allowedStatus.Contains(o.StatusCode)); 

NB:这是LINQ的对象,我不是100%确定它是否在LINQ中工作,并没有时间去检查它。 事实上, 在[A,B,C]中把它翻译成x不是太困难但是你必须自己检查。

所以,而不是包含作为替代的???? 在你的代码中,你可以使用任何更LINQ-uish:

 // 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中知道的相反,这就是为什么它不是那么明显。

当然,如果你喜欢stream利的语法,这是:

 var filteredOrders = orders.Order.Where(order => new[] {"A", "B", "C"}.Any(s => s == order.StatusCode)); 

在这里,我们再次看到LINQ中的一个惊喜(比如Joda-speech,最后select了这个选项)。 然而,从这个意义上说,它是非常合乎逻辑的,它检查列表(集合,集合)中是否至less有一个项目(即任何 )匹配单个值。