Получить подмножество элементов, используя .WHERE, а затем УДАЛИТЬ по условию, используя лямбда-выражения - PullRequest
0 голосов
/ 31 мая 2019

У меня есть список элементов, у этих элементов есть свойство, называемое 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 ]

1 голос
/ 31 мая 2019

Если я правильно понимаю вашу цель, это должно быть именно то, что вам нужно.

Ключевым отличием является использование () для группировки 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);
0 голосов
/ 31 мая 2019

Оператор && имеет более высокий приоритет, чем || оператор. Если хочешь || чтобы быть выполненным до &&, вам нужно обернуть его в ().

...