【问题标题】:C# Compare If Values In An Array are Found a SQL TableC# 比较是否在 SQL 表中找到数组中的值
【发布时间】:2016-03-16 16:49:45
【问题描述】:

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

   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;

            }

                }

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

【问题讨论】:

  • 试试 LINQ 怎么样?
  • 使用 al.Contains("some_group") 怎么样?你会摆脱那个foreach。
  • 我可以使用 LINQ。我会看看我能不能把任何东西放在一起。我从来没用过。

标签: c# sql asp.net arrays dataset


【解决方案1】:

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

  1. 没有理由使用ArrayList。而是使用List<T>,在您的情况下,T 将是string。这提供了类型安全性和更好的性能。
  2. 创建ArrayList 类的新实例,然后将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,但您需要为此提供更多详细信息。

【讨论】:

  • 好吧,我想我现在走在了正确的轨道上。我已将 userGroups 和 sqlGroups 正确加载到他们的列表中,现在我正在进行比较。您对比较和忽略大小写有何建议?我只需要检查用户组是否包含在我的 SQL 组列表中,但我不能保证它们都以正确的大小写输入!
  • @Ty53ler 编辑代码以展示如何进行不区分大小写的检查。
【解决方案2】:
List<string> userGroups = new List<string>();
List<string> sqlGroups = new List<string>();
var containedGroups = sqlGroups.Where(item=>userGroups.Contains(item));

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

【讨论】:

    猜你喜欢
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多