#c# #list
Вопрос:
Я создал этот пример проекта, в котором я пытаюсь удалить дополнительные данные с помощью Where
и Any
, но он все еще содержит данные. Он должен удалить заметки DD и просто сохранить заметки CC.
Любая помощь в этом была бы отличной.
TemplateNote = TemplateNote.Where(x =>
x.Content == "AA" amp;amp;
x.Conditions.Any(v => v.Target != removeAgentDisease)
).ToList();
https://dotnetfiddle.net/a3d6Py
текущий выходной сигнал включает примечания DD
TemplateNote AA
TemplateNoteCondition CC
TemplateNoteCondition DD
Должно быть так без DD
TemplateNote AA
TemplateNoteCondition CC
Ответ №1:
Вы удаляетесь из родительского списка, а не из дочернего списка. Поэтому вам нужно создать копию — TemplateNoteModel
с новым дочерним списком, который содержит только нужные элементы:
TemplateNote = TemplateNote
.Select(tn => new TemplateNoteModel
{
Conditions = tn.Conditions
.Where(c => c.Target != removeAgentDisease)
.ToList(),
Content = tn.Content,
Id = tn.Id
})
.Where(x => x.Conditions.Any()) // i guess you don't want empty condtions
.ToList();
Ваша модифицированная скрипка: https://dotnetfiddle.net/yduh5o
Комментарии:
1. Можно ли в любом случае сделать это без создания модели copy-TemplateNoteModel?
2. @Джефферсон: Да, вам нужно использовать цикл
TemplateNote
и изменять каждыйTemplateNoteModel
из них с помощью запроса, показанного в моем ответе. Поэтому вместоTemplateNote=TemplateNote.Select(...)
того, чтобы просто изменятьConditions
свойство в цикле:tn.Conditions=tn.Conditions.Where(c => c.Target != removeAgentDisease).ToList();
. Поэтому вы просто заново создаете (дополнительный)список. Имейте в виду, что при таком подходе вы не удаляете списки пустых условий.3. Извините, а что, если я тоже захочу удалить родителя ?
4. с условиями удаления агента
5. Если вы хотите удалить все родители, которые имеют только removeAgentDisease-условия и петли подход нужен второй (результат)список, что вы заполняете из цикла: dotnetfiddle.net/GdrXzB если необходимо сохранить исходный список, вы можете либо повторно присвоить результат-список в первоначальном списке или вам нужен второй цикл, в котором вы удалите элементы из первого списка, которые не входят в список результатов. Вы можете использовать
list.RemoveAll