Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中,如何将逗号分隔的键字符串转换为实际值字符串?_C#_String_Data Conversion - Fatal编程技术网

在C#中,如何将逗号分隔的键字符串转换为实际值字符串?

在C#中,如何将逗号分隔的键字符串转换为实际值字符串?,c#,string,data-conversion,C#,String,Data Conversion,有一个名为user的数据库表,假设它具有以下结构和值: UserKey UserName ------------------------ 1 John Smith 2 Andrew Wright 3 David Morgan 4 Judy Brown 5 ........ 在C#中,有人能告诉我如何编写一个函数/方法,将逗号分隔的键字符串转换为用户名字符串(也用逗号分隔)。UserKey和User

有一个名为user的数据库表,假设它具有以下结构和值:

UserKey    UserName
------------------------
1          John Smith
2          Andrew Wright
3          David Morgan
4          Judy Brown
5          ........
在C#中,有人能告诉我如何编写一个函数/方法,将逗号分隔的键字符串转换为用户名字符串(也用逗号分隔)。UserKey和UserName匹配在数据库表user中定义。例如,函数/方法应将字符串“
1,2,3,4”
转换为字符串“John Smith,Andrew Wright,David Morgan,Judy Brown”

多谢各位

您可以尝试将Rdbms表缓存到C#集合中,例如,
字典

或通过正则表达式:

  string source = "1,2,3,4";

  string result = Regex.Replace(source, "[0-9]+", match =>
    cache.TryGetValue(match.Value, out var name) ? name : "???");

这是你可以做到的。我假设您已经找到了从数据库中按id查找用户的方法(
GetUserFromDb
),所以我只是使用静态数组模拟了这一部分

void Main()
{
    var userKeysString = "1,2,,xx,732,3,4";
    var userNamesString = GetUserNames(userKeysString); 
}

public string GetUserNames(string userKeys)
{
    var keys = userKeys.Split(",").Select(x => int.TryParse(x, out var i) ? i : 0);
    return string.Join(", ", keys.Where(k => k > 0).Select(k => GetUserFromDb(k)?.UserName).Where(u => u != null));
}

private User GetUserFromDb(int userKey)
{
    return AllDbUsers.FirstOrDefault(u => u.UserKey == userKey);
}

public static User[] AllDbUsers = new User[]
{
    new User { UserKey = 1, UserName = "John Smith"},
    new User { UserKey = 2, UserName = "Andrew Wright"},
    new User { UserKey = 3, UserName = "David Morgan"},
    new User { UserKey = 4, UserName = "Judy Brown"},
    new User { UserKey = 5, UserName = "John Doe"},
};

public class User
{
    public int UserKey { get; set; }
    public string UserName { get; set; }
}

你能将RDBMS表缓存到C#集合中吗,比如说,
字典
?我不确定,你是在问我是否有权限还是想这样做?我不确定,但我确实想试试。非常感谢德米特里的帮助。我明天会试试,让你知道。非常感谢你的帮助。我明天会试试,然后告诉你。
  string source = "1,2,3,4";

  string result = Regex.Replace(source, "[0-9]+", match =>
    cache.TryGetValue(match.Value, out var name) ? name : "???");
void Main()
{
    var userKeysString = "1,2,,xx,732,3,4";
    var userNamesString = GetUserNames(userKeysString); 
}

public string GetUserNames(string userKeys)
{
    var keys = userKeys.Split(",").Select(x => int.TryParse(x, out var i) ? i : 0);
    return string.Join(", ", keys.Where(k => k > 0).Select(k => GetUserFromDb(k)?.UserName).Where(u => u != null));
}

private User GetUserFromDb(int userKey)
{
    return AllDbUsers.FirstOrDefault(u => u.UserKey == userKey);
}

public static User[] AllDbUsers = new User[]
{
    new User { UserKey = 1, UserName = "John Smith"},
    new User { UserKey = 2, UserName = "Andrew Wright"},
    new User { UserKey = 3, UserName = "David Morgan"},
    new User { UserKey = 4, UserName = "Judy Brown"},
    new User { UserKey = 5, UserName = "John Doe"},
};

public class User
{
    public int UserKey { get; set; }
    public string UserName { get; set; }
}