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;
尝试使用Contains
function;
确定序列是否包含指定的元素。
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有一个项目(即任何 )匹配单个值。