如何用字符串中的对象类型替换表名

本文关键字:类型 替换 对象 何用 字符串 | 更新日期: 2023-09-27 17:59:25

在我使用的信息系统(SAP Business One)中,每个文档都用SQL表表示。

Client order document : ORDR
Invoice document : OINV
Purchase Quotation : OPRQ

当用户单击其中一个按钮时,我需要使用exist函数来检查SQL表的一部分,并检查该客户端在系统中是否有文档。该函数返回一个字符串消息,其中包含表示该客户端在系统中拥有的文档的表的名称。

我需要编写一个函数,将表名替换为文档名。

eample:

"Client with ID:5634 has documents: OINV, ORDR"

需要更换为

 "Client with ID:5634 has documents: Invoice, Client order"

我想应该用一本字符串词典。怎么做?

感谢

如何用字符串中的对象类型替换表名

理想情况下,您不应该用生成的字符串进行字符串替换,而是从转换后的字符串中生成。例如,在不知道你实际拥有什么代码的情况下,你可以拥有:

private static readonly Dictionary<string, string> TableNameTranslations
    = new Dictionary<string, string>
{
    { "ORDR", "Client order document" },
    { "OINV", "Invoice document" },
    { "OPRQ", "Purchase quotation" }
};
...
public string GetClientDocumentDisplayString(int clientId)
{
    var tableNames = GetTableNamesForClient(clientId);
    var translatedNames = tableNames.Select(t => TableNameTranslations[t]);
    return $"Client with ID:{clientId} has documents: {string.Join(",", translatedNames)}";
}
private IList<string> GetTableNamesForClient(int clientId)
{
    // Whatever your code needs, returning ORDR, OINV etc
}

使用字典和Linq:

var databases = new Dictionary<string, string>();
databases["OINV"] = "Invoice";
databases["OPRQ"] = "Purchase Quotation";
databases["ORDR"] = "Order";
// ...
var str = "Some random text ORDR more text ORDR text OPRQ text OINV text ORDR";
var newstr = databases.Aggregate(str, (current, value) => 
  current.Replace(value.Key, value.Value));

后者也可以在创建字典后使用:

var str2 = new StringBuilder(str);
foreach (var pair in databases) {
    str2.Replace(pair.Key, pair.Value);
}
var newstr = str2.ToString();