Найти объекты в списке, которые соответствуют элементам в массиве - PullRequest
4 голосов
/ 28 мая 2020

Стартовый код: https://dotnetfiddle.net/lJhMyo

    string[] names = { "Burke", "Laptop", "Computer", 
                       "Mobile", "Ahemed", "Sania", 
                       "Kungada", "David","United","Sinshia" };

     var empList =  new List<Employee> {
         new Employee {Name = "Burke", ID = "IHED123"},
         new Employee {Name = "David", ID = "QIUHD454"},
         new Employee {Name = "Batman", ID = "OIWQE565"},
     };

Как мне создать запрос linq (синтаксис метода), который получает все объекты Employee, где имя сотрудника находится в массиве "names" ?

Если есть строка в «names», которой нет в empList, генерировать исключение.

EDIT: Что делать, если empList большой, и мне нужно совпадение без учета регистра для имени?

Ответы [ 3 ]

4 голосов
/ 28 мая 2020

Вы можете использовать .Contains. ie:

var result = empList.Where(x => names.Contains(x.Name));

Вы можете проверить, отсутствует ли имя:

bool noneMissing = !names.Any(n => empList.Any(x => x.Name == n));
2 голосов
/ 28 мая 2020

.Contains Проверяет, содержит ли массив или список элемент:

var Searched = emptList.Where(x => names.Contains(x.Name));

Если Searched.Length == 0, то нет элементов

Если вам нужна производительность, используйте for loop (ничего не более производительный) и для нечувствительного к регистру использования StringComparer.OrdinalIgnoreCase.

List<string> Searched = new List<string>;
for(int i = 0; i < names.Length; i++)
{
    if(emptList.contains(name[i], StringComparer.OrdinalIgnoreCase)
        Searched.Add(name[i]);
}
1 голос
/ 28 мая 2020

Для больших списков и сравнения без учета регистра вы можете использовать HashSet с предоставленным IEqualityComparer<string>:

var hashSet = new HashSet<string>(names, StringComparer.OrdinalIgnoreCase);
empList.Where(e => hashSet.Contains(e.Name));

И, возможно, перейти от LINQ к for l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...