Mar*_*inS 148 c# linq linq-to-objects list exists
我有一份清单orders
.
我想orders
根据一组订单状态进行选择.
所以基本上 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;
Run Code Online (Sandbox Code Playgroud)
Tim*_*ter 254
您的状态代码也是一个集合,因此请使用Contains
:
var allowedStatus = new[]{ "A", "B", "C" };
var filteredOrders = orders.Order.Where(o => allowedStatus.Contains(o.StatusCode));
Run Code Online (Sandbox Code Playgroud)
或者在查询语法中:
var filteredOrders = from order in orders.Order
where allowedStatus.Contains(order.StatusCode)
select order;
Run Code Online (Sandbox Code Playgroud)
小智 14
var statuses = new[] { "A", "B", "C" };
var filteredOrders = from order in orders.Order
where statuses.Contains(order.StatusCode)
select order;
Run Code Online (Sandbox Code Playgroud)
Son*_*nül 11
试试Contains
功能;
确定序列是否包含指定的元素.
var allowedStatus = new[]{ "A", "B", "C" };
var filteredOrders = orders.Order.Where(o => allowedStatus.Contains(o.StatusCode));
Run Code Online (Sandbox Code Playgroud)
Ale*_*tov 11
注意:这是对象的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;
Run Code Online (Sandbox Code Playgroud)
这与你从SQL中所知的相反,这就是为什么它不那么明显.
当然,如果您更喜欢流利的语法,那么它是:
var filteredOrders = orders.Order.Where(order => new[] {"A", "B", "C"}.Any(s => s == order.StatusCode));
Run Code Online (Sandbox Code Playgroud)
在这里,我们再次看到一个LINQ惊喜(比如Joda-speech,最后选择了).然而,在这个意义上它是非常合乎逻辑的,它检查列表(集合,集合)中的至少一个项目(即任何)是否与单个值匹配.