如何创建LINQ表达式以从包含字符串数组名称的集合中查找元素?
string[] names = ["John", "Hanna", "Bill", "Donald"];
我已经创建了如下表达式,但这是不正确的。我该如何解决?
result = (x => x.CompanyEmployeeName.Contains(names));
答案 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);