我有一份会议清单,其中我有另一份与会者名单。
与此类似的模型 -
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();
任何人都可以帮助我优化编写此查询的方法吗?
的Rahul。
答案 0 :(得分:11)
如果我正确读取您的代码,您将查询项目的子集,从原始列表中删除这些项目,修改子集中的项目,并将修改后的项目放回列表中。没有必要经历所有这些;只需修改列表中的项目。
然而,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";
}
请注意,两者之间的表现可能没有显着差异