Фильтровать коллекцию с помощью списка, содержащего аргументы

#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;