C# 可搜索列表 - 替换 SQL 表
C# Searchable Lists - Replace SQL Tables
我需要编写一个应用程序来执行一些较小的 AD 维护(基本上是从另一个应用程序中获取 key/value 对列表(AD 用户名和从 SQL 数据库中获取的值)文本文件的形式。文本文件中的值将作为每个用户的自定义属性存储在 AD 中。不幸的是,提供应用程序不会生成所有用户的列表;只有那些在字段中具有值的用户关注,所以任何曾经有值但现在没有的用户都不会出现在列表中 - 这意味着我不能使用列表直接删除属性值,只能添加或修改它。
如果我可以使用 SQL 服务器,我将只有一个 table 个所有用户和一个 table 个具有值(由其他应用程序提供)的用户并使用 SET语句将未出现在提供列表中的所有用户的属性设为空白,然后另一个 SET 填充出现在提供列表中的所有用户的值。
我是 C# 的新手,我不知道用于模拟 SET/SET 功能的最佳方法;我可以读取 AD 来获取所有用户,我可以读取文件来获取现在可以设置值的用户,但理想情况下我希望将它们读入两个“tables”并使用一些根据需要设置和取消设置属性的比较。我想不出一个网络搜索查询来找到我需要的东西(我的 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
(参见 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];
您可以将文件读入 Dictionary<string, string>
并像这样更新 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;
});
我需要编写一个应用程序来执行一些较小的 AD 维护(基本上是从另一个应用程序中获取 key/value 对列表(AD 用户名和从 SQL 数据库中获取的值)文本文件的形式。文本文件中的值将作为每个用户的自定义属性存储在 AD 中。不幸的是,提供应用程序不会生成所有用户的列表;只有那些在字段中具有值的用户关注,所以任何曾经有值但现在没有的用户都不会出现在列表中 - 这意味着我不能使用列表直接删除属性值,只能添加或修改它。
如果我可以使用 SQL 服务器,我将只有一个 table 个所有用户和一个 table 个具有值(由其他应用程序提供)的用户并使用 SET语句将未出现在提供列表中的所有用户的属性设为空白,然后另一个 SET 填充出现在提供列表中的所有用户的值。
我是 C# 的新手,我不知道用于模拟 SET/SET 功能的最佳方法;我可以读取 AD 来获取所有用户,我可以读取文件来获取现在可以设置值的用户,但理想情况下我希望将它们读入两个“tables”并使用一些根据需要设置和取消设置属性的比较。我想不出一个网络搜索查询来找到我需要的东西(我的 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
(参见 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];
您可以将文件读入 Dictionary<string, string>
并像这样更新 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;
});