如何用字符串中的对象类型替换表名
本文关键字:类型 替换 对象 何用 字符串 | 更新日期: 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();