c#如何更新List类型变量

本文关键字:List 类型变量 更新 何更新 | 更新日期: 2023-09-27 18:13:24

场景:在我的业务层中,我有这个名为"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 cars,因为GroupTypeName List被覆盖了。我如何编程它在这样的方式,我只是保持添加/更新groupsByMembersFirst列表,所以它不覆盖它?感谢帮助!

如果我不清楚请让我知道!

c#如何更新List类型变量

做一个单独的列表来保存组,在if()中添加项目到该列表,然后返回:

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;

您应该考虑反向选择,从最不具体到最具体("Admin")。

以列表开头,以AddRange结尾

var validOptions = new List...
if (IsUserInRole("N"))
{
    validOptions.AddRange(...)
}