【问题标题】:Updating List<string> values using linq C#使用 linq C# 更新 List<string> 值
【发布时间】:2021-05-15 19:47:15
【问题描述】:

我有一个字符串列表,如果列表中的某些项目与单独的对象列表中的字符串值匹配,我想对其进行迭代并更改值。

用户将电子邮件地址输入到包含 EventMembers 列表的 Event 对象中:

List<string> EventMembers

然后我想检查数据库中的所有用户以找到与输入的电子邮件地址匹配的用户名(电子邮件地址)

我知道我无法使用 foreach 循环更改列表中的值,但我不知道如何处理 linq。基本上我正在尝试做这样的事情:

var allUsers = _userManager.Users
                    

                foreach (var a in allUsers)
                {
                    foreach (var e in @event.EventMembers)
                    {
                        if (e == a.UserName)
                        {
                            e = a.FirstName + a.LastName;
                        }
                    }
                }

【问题讨论】:

  • 不要使用 LINQ,只需使用 for 循环。正常的 LINQ 将无法工作,因为您将收到“Collection Changed”异常。

标签: c# asp.net list linq model-view-controller


【解决方案1】:

最好的办法是定义成员的初始集合,这样您就不会在 foreach 仍在运行时不断修改列表。然后,您可以检查 EventMembers 是否包含用户名,然后通过使用索引访问值来替换它。

var allUsers = _userManager.Users;
List<string> Members;
foreach (var a in allUsers)
{
     if (@event.EventMembers.Contains(a.UserName))
     {
         var index = @event.Members.IndexOf(a.UserName);
         Members[index] = a.FirstName + a.LastName;
     }
}
EventMembers = Members;

【讨论】:

  • 那行得通。我不需要定义初始集合。我只是在 If 块中使用了代码,它工作得很好。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-01-24
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多