首页 > 解决方案 > 使用 .WHERE 获取项目的子集,然后使用 Lambda 表达式按条件删除

问题描述

我有一个项目列表,这些项目有一个名为 vog_code 的属性,它是一个 int,这个列表有各种项目,有 4 种不同类型的 vog_code,1,10,14,16。

现在,我想删除该列表中不遵守特定日期的项目,但对于 vog_codes 等于 14 和 16 的项目,条件会有所不同。

这是我现在的表达:

transaccionSinAgruparResp.ListaDeTransacciones.RemoveAll(x => x.vog_code == 14 || x.vog_code == 16 && x.fecha_recepcion >= fechaOriginal);

这是不正确的,因为它将消除所有带有 vog_code 14 和 16 的项目并且不遵守AND操作员。

有什么方法可以询问“对于这些 vog_code 14 和 16 的元素,我将检查日期是否大于或等于”。

我尝试了一个.Where然后.RemoveAll但这是不可能的。

我不想使用更多的辅助列表,除非它是唯一的方法。

标签: c#visual-studio-2012lambda

解决方案


如果我正确理解你的目标,这应该是你所需要的。

关键区别在于使用 对()2 个vog_code条件进行分组。

这将删除以下两个都为真的所有项目

  • vog_code是 14 或 16
  • fecha_recepcion >= fechaOriginal
transaccionSinAgruparResp.ListaDeTransacciones.RemoveAll(x => (x.vog_code == 14 || x.vog_code == 16) && x.fecha_recepcion >= fechaOriginal);

另一种方式

另一种方法是像这样切换你的条件:

transaccionSinAgruparResp.ListaDeTransacciones.RemoveAll(x => x.fecha_recepcion >= fechaOriginal && x.vog_code == 14 || x.vog_code == 16);

推荐阅读