使用 .WHERE 获取项目的子集,然后使用 Lambda 表达式按条件删除

Get a subset of items using .WHERE and then REMOVEALL by condition using Lambda Expressions

我有一个项目列表,这些项目有一个 属性 叫做 vog_code,它是一个整数,这个列表有各种项目,有 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 运算符。

请问有什么办法"for these elements that are vog_code 14 and 16 I then, will check if the dates are greater or equal".

我试过 .Where 然后 .RemoveAll 但那是不可能的。

我不想再使用辅助列表,除非这是唯一的方法。

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

主要区别在于使用 () 对 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);

&& 运算符的优先级高于 ||操作员。如果你想要||在&&之前执行,那么需要用()包裹起来。