【问题标题】:C# Searchable Lists - Replace SQL TablesC# 可搜索列表 - 替换 SQL 表
【发布时间】:2021-09-13 08:41:02
【问题描述】:

我需要编写一个应用程序,该应用程序将执行一些小的 AD 维护(基本上以文本文件的形式从另一个应用程序获取键/值对列表(AD 用户名和从 SQL 数据库中获取的值)。文本文件中的值将作为每个用户的自定义属性存储在 AD 中。不幸的是,提供应用程序不会生成所有用户的列表;只有那些在相关字段中有值的用户,所以任何有一个值但现在没有出现在列表中 - 这意味着我不能使用列表直接删除属性值,只能添加或修改它。

如果我可以使用 SQL Server,我将只拥有一个包含所有用户的表和一个包含值的用户表(由其他应用程序提供),并使用 SET 语句将所有未出现在提供的列表,然后是另一个 SET 来填充确实出现在提供的列表中的所有用户的值。

我是 C# 新手,我不知道用来模拟 SET/SET 功能的最佳方法;我可以读取 AD 以获取所有用户,我可以读取文件以获取现在要设置值的用户,但理想情况下,我希望将它们读入两个“表”并使用某种比较来设置并根据需要取消设置属性。我想不出一个网络搜索查询来找到我需要的东西(我的 Google-fu 对于我刚接触的主题很弱),所以任何关于最佳方式的建议都会非常感激。

示例:

原始广告列表:

AD Username    Madeup Attribute
------------------------------
abc1           value1
bcde           {no value}
fgh            value2

提供的列表:

AD Username    Madeup Attribute
---------------------------------
bcde           value3
fgh            value4

产生的 AD 值:

AD Username     Madeup Attribute
--------------------------------
abc1           {no value}
bcde           value3
fgh            value4

如果我的解释不够清晰,我深表歉意 - 似乎是我的“(许多)弱点之一。

【问题讨论】:

  • 所以你可以阅读广告,你可以阅读文件?它只是连接你被卡住的两个?在读取文件时如何临时存储文件中的值?如果你给我们一些你所拥有的代码 - 它会给我们更多的参考框架。
  • 这似乎不是一个合并操作,它是一个替代品?文件总是胜过广告?将文件读入Dictionary<T,U>,枚举AD,如果字典不包含广告用户,则将属性值设置为空,如果字典包含则更新值并删除字典条目。在操作结束时决定如何处理任何剩余的字典条目(添加到 AD?)
  • 每个用户在文件中有一个或多个属性?
  • @AndrewCorrigan - 抱歉,我还没有任何代码,因为我无法决定使用方法。就像我说的,我是新手,我通常的方法不适合我。
  • @CaiusJard - 是的,就是这样;该文件总是获胜,但数据不完整。没有必需属性的任何用户都不会在文件中拥有条目。我可以为所有用户清空该属性,然后处理该文件,但我想要比这更优雅、更全面的更好

标签: c# custom-lists


【解决方案1】:

使用Dictionary(参见https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2?view=net-5.0)是一种简单的方法。

在第一步中,读入所有用户 ID 并添加一个值为 null 的条目

using System.Collections.Generic;
...
Dictionary<string, string> dic = new  Dictionary<string, string>();

// For each user in the AD list:
dic.Add(username, null);  // Could als use empty string "" instead of null

// For each user in the provided list:
dic[username] = userattribute;

然后您可以稍后引用属性并通过使用获取用户的属性

string attr = dic[username];

【讨论】:

  • 嗨克里斯托弗 - 我以前从未使用过字典,但如果它可以直接搜索,那么我认为这可能是前进的方向。在我的脑海中,我认为字典将填充在文件中设置了属性的用户,然后我将依次读取 AD,为所有不在字典中的用户清空属性并更新那些是 - 听起来对吗?
  • 您好 - 效果很好,谢谢您的建议。我一定会记住未来的字典:-)
【解决方案2】:

您可以将文件读入Dictionary&lt;string, string&gt; 并像这样更新 AD 用户:

        //Key is username and Value is attribute
        var userAttributes = new Dictionary<string, string>();
        
        //fill dictionary with file

        //get list of AD users
        var activeDirectoryUsers = new List<YourADUserModel>();

        //map the made up attribute from dictionary
        activeDirectoryUsers.ForEach(x =>
        {
            x.MadeUpAttribute= userAttributes.FirstOrDefault(x => x.Key == x.Username).Value;
        });

【讨论】:

  • 嗨,Saeed - 你的回答看起来很有趣,但恐怕我需要尽快得出结果,上面代码的最后一点我需要进行更多研究。不过,谢谢 - 它会让我学到更多东西,这总是一件好事:-)
猜你喜欢
  • 2021-09-06
  • 2015-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 2023-03-16
相关资源
最近更新 更多