更改属性值-6ren"> 更改属性值-我有一个 session 列表,其中我有另一个与会者列表。 模型类似这样: public class Meeting { public string Id { get; set; } -6ren">
gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:44:27 24 4
gpt4 key购买 nike

我有一个 session 列表,其中我有另一个与会者列表。

模型类似这样:

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; }
}

我有 Meetings 的列表: List<Meeting> meetings = GetMeetings();

现在我想屏蔽 Title其中一位用户是 bot@domain.com 的 session .我可以在多个 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();

谁能帮我找到编写此查询的优化方式?

最佳答案

如果我没看错你的代码,你正在查询项目的子集,从原始列表中删除这些项目,修改子集中的项目,然后将修改后的项目放回列表中。没有必要经历所有这些;只需修改列表中的项目即可。

但是,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";
}

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

关于c# - LINQ "Where"条件 -> 更改属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36043363/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com