LINQ" где " условие - > изменить значение свойства

у меня есть список встреч, внутри которых у меня есть еще один список участников.

модель, похожая на эту -

public class Meeting
    {
        public string Id { get; set; }
        public string Title { get; set; }
        public List<User> Users { get; set; }
        public DateTime StartTime { get; set; }
        public DateTime EndTime { get; set; }
    }

у меня есть список из собрания

List<Meeting> meetings = GetMeetings();

теперь я хочу замаскировать Title встречи, где один из пользователей bot@domain.com. Я могу достичь этого в нескольких запросах LINQ, но я ищу оптимизированный запрос LINQ..

может кто-нибудь помочь мне с этим?

что я пробовал -

var maskedMeetings = meetings.Where(x = x.Users.Any(a => a.Email.Equals("bot@domain.com"))); 

meetings = appointments.Except(maskedMeetings).ToList();

maskedMeetings = maskedMeetings.Select(x => { x.Title = "Bot"; return x; }).ToList();

meetings = meetings.Concat(maskedMeetings).ToList();

может ли кто-нибудь помочь мне с оптимизированным способом написания этого запроса?

Рахул.

1 ответов


Если я правильно прочитал ваш код, вы запрашиваете подмножество своих элементов, удаляете эти элементы из исходного списка, изменяете элементы в подмножестве и возвращаете измененные элементы в список. Нет необходимости проходить через все это; просто измените элементы в списке.

Linq, однако, для запрос, а не обновление. Чтобы обновить объекты в коллекции, просто используйте цикл:

foreach(var meeting in meetings)
{
    if(meeting.Users.Any(a => a.Email.Equals("bot@domain.com")))
        meeting.Title = "Bot";
}

или используйте Linq для предварительной фильтрации список

foreach(var meeting in meetings.Where(x = x.Users.Any(a => a.Email.Equals("bot@domain.com")))
{
    meeting.Title = "Bot";
}

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