#c# #.net #linq
#c# #.net #linq
Вопрос:
У меня есть коллекция клиентов, содержащая CustomerID, CustomerName и несколько других столбцов.
Я передаю список идентификаторов для фильтрации коллекции.
Вот как далеко я продвинулся — в этом примере ‘filteredCustomers’ должен содержать клиентов, имеющих CustomerID 3 или 5.
List<int> customerIds = new List<int>();
customerIds.Add(3);
customerIds.Add(5);
var filteredCustomers = from Customer in Customers.Where(x=>x.CustomerId).Contains(customerIds);
Что я делаю не так — любая помощь с благодарностью.
Джо
Ответ №1:
Вы можете использовать:
var filteredCustomers = Customers.Where(x => customerIds.Contains(x.CustomerId));
Тем не менее, я бы настоятельно рекомендовал использовать a HashSet<T>
вместо List<T>
для этого, так как это значительно ускорит Contains
проверку, если вы добавите больше чисел в будущем. Это будет выглядеть так:
var customerIds = new HashSet<int>();
customerIds.Add(3);
customerIds.Add(5);
var filteredCustomers = Customers.Where(x => customerIds.Contains(x.CustomerId));
Ответ №2:
from Customer in Customers
where customerIDs.Contains(Customer.CustomerId);
Комментарии:
1. и вы можете встроить список: из Customer в Customers, где новый список<int> { 3, 5 }.Содержит(Customer. CustomerID)
2. Я полагаю, вам понадобится
select Customer
предложение в конце.3. верно, но у него не было выбора, и поэтому я также исключил его из своего: из Customer в Customers, где новый список<int> { 3, 5 }.Содержит(Customer. CustomerID) выберите Customer;
Ответ №3:
var filteredCustomers = Customers.Where(x=>customerIds.Contains(x.CustomerId));
Ответ №4:
var byCustIds = from d in Customers
where customerIDs.Contains(d.CustomerId)
select d;