我有一个列表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;
您的状态码也是一个集合,所以在使用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
功能;
确定序列是否包含指定的元素。
var allowedStatus = new[]{ "A", "B", "C" };
var filteredOrders = orders.Order.Where(o => allowedStatus.Contains(o.StatusCode));
注:这是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知道为什么它是不那么明显。
当然,如果你喜欢这里流利的语法是:
var filteredOrders = orders.Order.Where(order => new[] {"A", "B", "C"}.Any(s => s == order.StatusCode));
在这里,我们再次看到了LINQ惊喜(如乔达语音这在年底把选择)之一。 然而正是在这个意义上相当合乎逻辑的,它会检查项目中的至少一个(即有 )的列表(组,集合)匹配单个值。
只是要小心, .Contains()
将匹配任何字符串包括你不要指望字符串。 对于如。 new[] { "A", "B", "AA" }.Contains("A")
将返回A和您可能不想AA。 我已经被它咬伤。
.Any()
或.Exists()
是更安全的选择