LINQ"Where"条件 - >更改属性值

Rah*_*til 9 c# 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; }
    }
Run Code Online (Sandbox Code Playgroud)

我有会议清单

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();
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我优化编写此查询的方式吗?

拉胡尔.

D S*_*ley 12

如果我正确读取您的代码,您将查询项目的子集,从原始列表中删除这些项目,修改子集中的项目,并将修改后的项目放回列表中.没有必要经历所有这些; 只需修改列表中的项目.

但是,Linq用于查询,而不是更新.要更新集合中的对象,只需使用循环:

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

或使用Linq预过滤列表

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

请注意,两者之间的性能可能没有显着差异