从集合中查找元素包含字符串数组中的名称

时间:2018-08-31 07:31:12

标签: c# linq

如何创建LINQ表达式以从包含字符串数组名称的集合中查找元素?

string[] names = ["John", "Hanna", "Bill", "Donald"];

我已经创建了如下表达式,但这是不正确的。我该如何解决?

result = (x => x.CompanyEmployeeName.Contains(names));

5 个答案:

答案 0 :(得分:3)

如果要检查names是否包含x.CompanyEmployeeName,则需要使用:

result = something.Where(x => names.Contains(x.CompanyEmployeeName));

答案 1 :(得分:2)

myCollection是具有属性Name的自定义类的集合。您必须根据names数组中对象名称应该可用的条件,从该集合中获取所有对象。然后您可以尝试以下方法:

var filteredItems = myCollection.Where(x=> names.Any(y=>y == x.Name)); 

我添加了一个有效的示例here

答案 2 :(得分:2)

您需要将其反转。检查名称是否包含雇员

var result = db.CompanyEmployee.Where(x => names.Contains(x.CompanyEmployeeName));

如果上下文中的列表大于示例数据,则首选另一个选项,即使用Join

var result = db.CompanyEmployee.Join(names, x=> x.CompanyEmployeeName, n => n, (x,n)=> n);

答案 3 :(得分:1)

在LINQ中,您应该首先拥有一个集合。 例如:如果您有清单:listCompanyEmployee,则可以使用以下表达式:

var result = listCompanyEmployee.Where(x => names.Contains(x.CompanyEmployeeName));

答案 4 :(得分:0)

您可以使用Array.Exists。例如,如果您要检查names是否包含CompanyEmployeeName

result = something.Where(x => Array.Exists(names, name => name == x.CompanyEmployeeName));

,您可以像这样使用Array.IndexOf

result = something.Where(x => Array.IndexOf(names, x.CompanyEmployeeName) != -1);