C# 使用linq检查一个数组中的值是否存在于另一个数组中

C# 使用linq检查一个数组中的值是否存在于另一个数组中,c#,linq,lambda,C#,Linq,Lambda,我有一个列表,其中myclass是用一些属性定义的 List<MyClass> myClassList = new List<MyClass>(); myClassList.Add(new MyClass() { Id = 1, Name = "My first test", Key = "First" }); myClassList.Add(new MyClass() { Id = 2, Name = "My second test", Key = "Second" }

我有一个列表,其中myclass是用一些属性定义的

List<MyClass> myClassList = new List<MyClass>();
myClassList.Add(new MyClass() { Id = 1, Name = "My first test", Key = "First" });
myClassList.Add(new MyClass() { Id = 2, Name = "My second test", Key = "Second" });
List myClassList=newlist();
添加(new MyClass(){Id=1,Name=“我的第一个测试”,Key=“first”});
添加(newmyclass(){Id=2,Name=“我的第二次测试”,Key=“second”});
然后我有一个路径,即c:\MyFolders\company name\my First Test,我使用正则表达式(即myArrayPath)将其分解为一个字符串数组

我想知道基于给定属性的myClassList的任何元素(例如名称)是否可以在myArrayPath中的任何元素中找到,理想情况下,我想返回键,但如果我返回与myArrayPath中的一个元素匹配的对象,这将同样好

有没有一种方法可以使用linq和/或lambda表达式实现这一点


谢谢。

使用LINQ很容易做到这一点:

var keyResult = myClassList.Where(x=>myArrayPath.Contains(x.Name))
    .Select(x=>x.Key);

如果您需要数组列表的形式,只需在其末尾添加
.ToList()
ToArray()

Spot on!!我刚刚稍微修改了上面的代码以返回实际的键,因为两个数组中的所有值都是唯一的,所以不需要返回列表。string key=myClassList.Where(x=>myArrayPath.Contains(x.Name)).Select(x=>x.key.First();