У меня есть список 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
:или в синтаксисе запроса:
источник
источник
NB: это LINQ для объектов, я не уверен на 100%, работает ли он в LINQ для объектов, и у меня нет времени проверять это прямо сейчас. На самом деле это не так уж сложно перевести на x в [A, B, C], но вы должны проверить это сами.
Итак, вместо Содержит в качестве замены ???? в вашем коде вы можете использовать Any, более LINQ-uish:
Это противоположно тому, что вы знаете из SQL, поэтому это не так очевидно.
Конечно, если вы предпочитаете свободный синтаксис, вот он:
Здесь мы снова видим один из сюрпризов LINQ (например, Joda-speech, который ставит select в конце). Однако в этом смысле вполне логично, что он проверяет, соответствует ли хотя бы один из элементов (то есть любой ) в списке (множество, коллекция) одному значению.
источник
Попробуй с
Contains
функцией;источник
Только будьте осторожны,
.Contains()
подойдет любая подстрока, включая строку, которую вы не ожидаете. Например,new[] { "A", "B", "AA" }.Contains("A")
вернет вам оба A и AA, которые вы можете не захотеть. Я был укушен этим..Any()
или.Exists()
более безопасный выбористочник