C#如何更新一个List类型的变量

C# How to update a List type variable

场景: 在我的业务层中,我有一个名为 "groups" 的变量,它是 4 个不同组的列表。业务需求是以这样的方式显示组,以便您只能查看分配给您的组。棘手的部分是一个人可能属于多个群体。我有以下逻辑,非常适合 AppAdmin,因为他们能够查看所有组。

  if (IsUserInRole("Admin"))
  {
      groupsByMembersFirst = groupsByMembersFirst;
  }

  if (IsUserInRole("B"))
  {
      groupsByMembersFirst = groupsByMembersFirst.Where(g => g.GroupTypeName != "Bikes")
                                                 .ToList();
  }

  if (IsUserInRole("C"))
  {
      groupsByMembersFirst = groupsByMembersFirst.Where(g => g.GroupTypeName != "Cars")
                                                 .ToList();
  }

  if (IsUserInRole("N"))
  {
      groupsByMembersFirst = groupsByMembersFirst.Where(g => g.GroupTypeName != "NanoCars")
                                                 .ToList();
  }

  return groupsByMembersFirst;

组包含所有 4 个组。

以下是我需要帮助的内容: 目前,如果用户处于角色 B 和 C,它将只显示 GroupTypeName 汽车,因为 GroupTypeName 列表被覆盖。我如何以只保留 add/update groupsByMembersFirst 列表的方式对其进行编程,这样它就不会覆盖它?帮助赞赏!

如果我不清楚请告诉我!

您应该考虑倒置您的选项,从最不具体到最具体 ("Admin")。

以列表开头并附加 AddRange

var validOptions = new List...

if (IsUserInRole("N"))
{
    validOptions.AddRange(...)
}

创建一个包含组的单独列表,在 if() 中将项目添加到该列表,然后 return:

var returnVal = new List<Group>();

if (IsUserInRole("Admin"))
{
    returnVal.AddRange(groupsByMembersFirst);
}
if (IsUserInRole("B"))
{
    returnVal.AddRange(groupsByMembersFirst.Where(g => g.GroupTypeName != "Bikes"));
}
if (IsUserInRole("C"))
{
    returnVal.AddRange(groupsByMembersFirst.Where(g => g.GroupTypeName != "Cars"));
}
if (IsUserInRole("N"))
{
    returnVal.AddRange(groupsByMembersFirst.Where(g => g.GroupTypeName != "NanoCars"));
}
return returnVal;