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

时间:2019-05-31 20:00:12

标签: c# visual-studio-2012 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,但这是不可能的。

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

&&运算符的优先级高于||。操作员。如果要||要在&&之前执行,则需要将其包装在()中。