在两个对象 List 中查找公共项的“现代”方法是什么?

2023-11-27

我有两个包含不同类型的通用列表,为了举例,让我们称它们为Products and Employees。我正在尝试查找与员工位于同一地点的产品,即product.SiteId == emp.SiteId

List<Product> lstProds;
List<Employees> lstEmps;

我的(老旧的)大脑告诉我使用forEach循环查找匹配项,但我怀疑有一种(“更好”/更简洁/更快?)方法可以使用 Linq 来完成此操作。谁能照亮我吗?我在网上找到的所有示例都涉及基元列表(字符串/整数),并且并不是特别有用。


我会说:

var products = from product in lstProds
               join employee in lstEmps on product.SiteId equals employee.SiteId
               select product;

然而,如果有multiple具有相同站点 ID 的员工,您将多次获得产品。你可以使用Distinct要解决此问题,或构建一组站点 ID:

var siteIds = new HashSet<int>(lstEmps.Select(emp => emp.SiteId));

var products = lstProds.Where(product => siteIds.Contains(product.SiteId));

这是假设SiteId is an int- 如果它是匿名类型或类似的类型,您可能需要一个额外的扩展方法:

public static HashSet<T> ToHashSet<T>(this IEnumerable<T> source)
{
    return new HashSet<T>(source);
}

Then:

var siteIds = lstEmps.Select(emp => emp.SiteId).ToHashSet();
var products = lstProds.Where(product => siteIds.Contains(product.SiteId));

或者,如果您的员工很少,这也可以,但速度相对较慢:

var products = lstProds.Where(p => lstEmps.Any(emp => p.SiteId == emp.SiteId));

Add a ToList调用任何这些方法来获取List<Product>而不是IEnumerable<Product>.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在两个对象 List 中查找公共项的“现代”方法是什么? 的相关文章

随机推荐

  • jQuery:删除除内部元素之外的元素

    有没有办法删除除内部元素之外的元素 div class gallery a href images rep png title rep img src http example com uploads rep png class thumb
  • 是否可以将预览、图像分析和视频捕获与 CameraX 结合起来?

    是否可以绑定Preview ImageAnalysis and VideoCapture同时 成对组合 所有可能的组合 即 Preview ImageAnalysis Preview VideoCapture and ImageAnalys
  • 如何从magento中的cms页面传递带有块表单内容的参数

    我想传递一个带有块代码的变量 例如magento中的JSON类型 block type multibanners multibanners category id 9 name multibanners alias multibanners
  • ContentResolver.insert 始终返回 null

    我试图通过按下按钮来设置自定义铃声 但从 ContentResolver 的插入方法中获取 null 以下是负责设置铃声的代码 我检查了 stackoverflow 本身 一些用户说它对他们有用 但在我的例子中 我将变量 newUri 设置
  • UserPrincipal 对象中的域名在哪里?

    我正在使用System DirectoryServices ActiveDirectory类来查找所有 Active Directory 用户 代码很简单 var context new PrincipalContext ContextTy
  • 使用 Firebase 进行分页/无限滚动

    我有一个我创建的节点的子节点childByAutoId 我正在尝试在 TableView 中使用它进行分页 但我不知道如何操作 我的数据库如下所示 items KKM7Fv8H7dCiD2xChYB userID 1231231 KKM7F
  • VBA 分割字符串循环

    我正在尝试拆分字符串并创建一个循环来遍历列中的单元格 存在一些挑战 拆分适用于ActiveCell only 循环遍历所有单元格直到 LastRow 但填充所有单元格 分割字符串值来自ActiveCell only 数组的分割开始于i 0即
  • HTML5 输入标记中的数字格式

    这是我的输入
  • ReactJS Array.push 函数在 setState 中不起作用

    到目前为止 我正在制作一个原始的测验应用程序 其中包含 3 个问题 全部是对还是错 在我的handleContinue方法有一个调用 将用户输入从无线电表单推送到userAnswers大批 第一次运行效果很好handleContinue 之
  • Gridview - 单击图像可在 Viewpager 中查看图像

    这是一个从 json 获取图像的 gridview 而且效果很好 我想单击此网格视图中的图像以显示完整图像并可以滑动它 我发现这个问题的解决方案是使用Viewpager 如何在gridview中点击图片来显示图片并且可以滑动 您可以更轻松地
  • 监听Mac键盘播放/暂停事件

    某些 Mac 应用程序 例如 iTunes 和 Spotify 会对某些 Apple 键盘上的播放 暂停 下一个 上一个按钮做出反应 想必他们正在利用某种 NSNotification 我该如何做同样的事情呢 我通过使用以下命令对 NSAp
  • 捆绑包有问题

    我尝试命令bundle install local但它显示问题 bash usr local bin bundle usr local bin ruby bad interpreter No such file or directory 请
  • \n 在 python 中的工作[重复]

    这个问题在这里已经有答案了 我目前正在学习 python 课程 当谈论转义序列时 他们谈到 n 用于在新行中打印字符串 但是当它以以下方式使用时为什么我会得到不同的输出 gt gt gt st Hello nWorld gt gt gt s
  • Python:os.path.isfile 无法识别以数字开头的文件

    所以 我正在尝试合并os path isfile or os path exists进入我的代码 在搜索以字母开头的文件名时成功找到某些常规文件 pdf png 我正在使用的文件命名标准 并且不能因用户而更改 以数字开头 随后无法使用相同的
  • 没有 main 方法的 C# 类

    我正在学习 C 而且对它很陌生 所以请原谅我提出这个看似愚蠢的问题 我有一些 Java 经验 我注意到 C 程序也需要一个main 他们的主类中的方法 如果我想创建一个不是主类的类 即导入到主类中的类 该怎么办 我尝试这样做 当我编译时 通
  • Node.js 的进程间和服务器间事件发射器/监听器?

    目前 我正在使用事件发射器2作为我的应用程序中的消息总线 我真的很喜欢它 不管怎样 现在我需要一个消息总线 它不仅可以在进程内工作 而且可以在进程间工作 我理想的候选人是 与 EventEmitter2 API 兼容 直接替代品 无需专用服
  • 无法使用有效的 Sectigo 代码签名证书对 VBA 进行签名

    我们正在使用 Sectigo 代码签名证书 仅 OV 组织验证 而不是 EV 来签署我们的 exe 应用程序 近年来没有出现过问题 现在我们尝试使用相同的证书在 Word Excel 中签署 VBA 但没有成功 当我打开时VBA edito
  • EXPORT AS INSERT 语句:但是在 SQL Plus 中,该行覆盖了 2500 个字符!

    我必须将 Oracle 表导出为 INSERT 语句 但这样生成的 INSERT STATEMENTS 会覆盖 2500 个字符 我必须在 SQL Plus 中执行它们 因此我收到一条错误消息 这是我的 Oracle 表 CREATE TA
  • 能否保留 XML 中的前导和尾随空格?

    如何告诉 XML 解析器尊重前导和尾随空格 Dim xml Set xml CreateObject MSXML2 DOMDocument xml async False xml loadxml
  • 在两个对象 List 中查找公共项的“现代”方法是什么?

    我有两个包含不同类型的通用列表 为了举例 让我们称它们为Products and Employees 我正在尝试查找与员工位于同一地点的产品 即product SiteId emp SiteId List