Как найти объект в списке с определенным свойством с помощью лямбда-операторов?

#c# #lambda

#c# #лямбда

Вопрос:

Я пытаюсь понять лямбда-операторы… вот что у меня есть на данный момент.

У меня есть List<Record> named record_list . Я хочу удалить Record из нашего списка объект, обладающий Record.UserName свойством USER1 .

 record_list.Remove(record_list.Where(r = r.UserName.ToString() == "USER1"))
  

Очевидно, я что-то неправильно понимаю, но я думаю, что я близок.

Ошибка, которую я получаю, это:

невозможно преобразовать из System.Collections.Generic.IEnumerable<Client_SCM_2.Record> в Client_SCM_2.Record

Заранее спасибо за вашу помощь!

Ответ №1:

Сначала попробуйте получить запись, а затем удалите ее из списка, если она существует

 var record = record_list.FirstOrDefault(r => r.UserName.ToString() == "USER1");
if(record != null) {
   record_list.Remove(record);
}
  

Ответ №2:

Приведенный ниже код вернет IEnumerable

 var User1List = record_list.Where(x => x.UserName.ToString() == "USER1"));
  

Чтобы получить ваш объект, используйте First() или FirstOrDefault()

Затем удалите запись

 var recordToBeDeleted = User1List.FirstOrDefault();
if(recordToBeDeleted != null) //null means no record found
{
    record_list.Remove(recordToBeDeleted )
}
  

Если вы хотите удалить все записи, соответствующие предикату, используйте removeAll

 record_list.RemoveAll(x => x.UserName.ToString() == "USER1");
  

Ответ №3:

 record_list.RemoveRange(record_list.Where(r => r.UserName.ToString() == "USER1"))
  

Я думаю, вам нужен RemoveRange
Кроме того, вам не хватало a > для лямбда.

Надеюсь, это поможет