0

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

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

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

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

5 回答 5

3

如果你想检查是否names包含x.CompanyEmployeeName,你会想要使用:

result = something.Where(x => names.Contains(x.CompanyEmployeeName));
于 2018-08-31T07:37:16.747 回答
2

myCollection成为具有属性的自定义类的集合Name。您必须根据对象名称应在names数组中可用的条件从该集合中获取所有对象。然后你可以试试这个:

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

我在这里添加了一个工作示例

于 2018-08-31T07:36:03.730 回答
1

你需要扭转它。检查名称是否包含员工

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);
于 2018-08-31T07:36:54.387 回答
1

在您的 LINQ 中,您应该首先有一个集合。例如:如果你有一个列表:listCompanyEmployee 那么你可以使用下面的表达式:

var result = listCompanyEmployee.Where(x => names.Contains(x.CompanyEmployeeName));
于 2018-08-31T07:42:00.597 回答
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);
于 2018-08-31T07:48:53.387 回答