查找列表中与数组中的元素匹配的对象

Jam*_*ani 5 c# linq

起始代码: 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"},
     };

Run Code Online (Sandbox Code Playgroud)

如何构造一个 linq 查询(方法语法)来获取员工姓名位于“names”数组中的所有 Employee 对象?

如果“names”中存在不在 empList 中的字符串,则抛出异常。

编辑:如果 empList 很大并且我想要名称不区分大小写匹配怎么办?

Cet*_*soz 5

您可以使用.Contains。IE:

var result = empList.Where(x => names.Contains(x.Name));
Run Code Online (Sandbox Code Playgroud)

您可以检查是否缺少名称:

bool noneMissing = !names.Any(n => empList.Any(x => x.Name == n));
Run Code Online (Sandbox Code Playgroud)


Fre*_*chy 2

.Contains 测试数组或列表是否包含该项目:

var Searched = emptList.Where(x => names.Contains(x.Name));
Run Code Online (Sandbox Code Playgroud)

如果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]);
}
Run Code Online (Sandbox Code Playgroud)