c# - 仅当存在时如何检查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 足够了解如何进行此搜索,任何帮助将不胜感激。
解决方案
您可以使用Intersect
+Any
List<Person> validPeople = PersonList
.FindAll(p => NumbersOfConcern.Intersect(p.PhoneNumbers).Any());
为了获得最佳性能,更大的列表应该是第一个,所以NumbersOfConcern
在这里。
推荐阅读
- erlang - 指标没有从存储桶中删除(Dalmatiner DB)
- java - 已关闭的应用程序如何在 Android 10 上使用 WorkManager 执行定期工作?
- numpy - 如何使用 NumPy 数组实现理解?
- python - 查找由矩形封闭的点的坐标
- ios - 使折线图渐变颜色从线到底部 - SwiftUI
- c++ - 是否有理由不打印整个字符串?
- python - 使用 python 将相机和音频流传输到 google meet
- python - 保存到文件时从 Dask 数据框中删除屏蔽行
- amazon-cognito - Cognito 上的 AWS Amplify.SignIn 网络错误
- linker - 是否有人说只为一个配置链接 SPM?