首页 > 解决方案 > 仅当存在时如何检查linq中数组的第二个元素

问题描述

如果我有一个 People 列表,它们是 Person 类的实例,并且每个 Person 都有一个数组,该数组存储链接到他们的帐户的电话号码。有些人只有一个家庭电话号码,有些人也有一个手机号码,所以这个数组的大小不是固定的,它可以有一个或两个元素。我将如何进行 linq 搜索以查找具有特定电话号码的帐户?到目前为止,我有:

List<int> NumbersOfConcern; // A list of the phone numbers i am searching

List<Person> validPeople = PersonList.FindAll(p => 
        (NumbersOfConcern.Contains(p.PhoneNumbers[0].ToString()) || // Check accounts primary number
        NumbersOfConcern.Contains(p.PhoneNumbers[1].ToString()))); // Check accounts secondary number

此代码会导致所有没有注册辅助号码的帐户崩溃,因为它试图访问不存在的数据,而且我不知道 linq 足够了解如何进行此搜索,任何帮助将不胜感激。

标签: c#linq

解决方案


您可以使用Intersect+Any

List<Person> validPeople = PersonList
    .FindAll(p => NumbersOfConcern.Intersect(p.PhoneNumbers).Any());

为了获得最佳性能,更大的列表应该是第一个,所以NumbersOfConcern在这里。


推荐阅读