C# 比较是否找到数组中的值 SQL Table

C# Compare If Values In An Array are Found a SQL Table

我正在尝试在我的 Web 应用程序中进行一些组比较,并想查看当前用户是否在我存储在 SQL table 中的特定组列表中。我目前正在使用这种方法将我的组放入数组中...

   public ArrayList GetGroups()
    {
     ArrayList groups = new ArrayList();
    foreach (System.Security.Principal.IdentityReference group in
    System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups)
    {
    groups.Add(group.Translate(typeof
    (System.Security.Principal.NTAccount)).ToString());
    }
    return groups;
    }

从这里我可以通过这样做来检查用户是否在某个组中

ArrayList al = new ArrayList();
        al = GetGroups();


            foreach (string s in al)
            {
                if (s == "some_group")
                {                    
                    //do this;

            }

                }

我可以让它为个人甚至几个小组工作,但我有一个 SQL table 大约有 20 个小组,我只是想在数组之间使用某种比较和我的 SQL table。我尝试使用数据集并比较它们,但无法正常工作。任何建议表示赞赏我只是在学习如何在 C# 中工作。谢谢。

我从您的代码中注意到的几点:

  1. 没有理由使用ArrayList。而是使用 List<T>,在您的情况下,T 将是 string。这提供了类型安全和更好的性能。
  2. 您创建了 ArrayList class 的新实例,然后将 GetGroups 的结果分配给该变量 (al)。您无目的地初始化了 ArrayList 的一个实例,您已经在 GetGroups 方法中创建了该实例。

我不太确定您想要在用户组和 SQL 组之间进行什么比较。随意添加更多详细信息,但您可以像这样进行非常基本的包含检查:

List<string> userGroups = GetUserGroups();
List<string> sqlGroups = GetSqlGroups();

foreach (var sqlGroup in sqlGroups)
{

    // case-sensitive check
    if (userGroups.Contains(sqlGroup))
    {
        // the user has one of the SQL groups
    }

    // case-insensitive check
    if (userGroups.Contains(sqlGroup, StringComparer.OrdinalIgnoreCase))
    {
        // the user has one of the SQL groups
    }

}

您可以使用 LINQ 获得更高级的知识,或者即使您需要考虑 cAsE sEnsiTiviTY,但您需要为此提供更多详细信息。

List<string> userGroups = new List<string>();
List<string> sqlGroups = new List<string>();
var containedGroups = sqlGroups.Where(item=>userGroups.Contains(item));

如果你能确定你的数据类型,Generic List 比 ArrayList 好。