在 C# 中从数据库中音译数据
Transliterate data from database in C#
我有一个包含 100 多个表的数据库。所有数据都保存为拉丁字符。我想在我的应用程序中将这些数据显示为西里尔字符。我在我的应用程序、LINQ to SQL 组件和 MSSQL 中使用 .NET Framework 4.7.2。我有 tried/read 关于拦截器或包装器(拦截来自我的应用程序的每个 SQL 调用并调用音译字符串的自定义函数)但我无法弄清楚。这甚至有可能实现吗?
示例:
数据库:工人(身份证、姓名、姓氏)
应用程序:
public Worker GetWorker(int workerId){
using (var db = new DB())
{
var worker = db.Workers.SingleOrDefault(m => m.Id == workerId);
return Transliterate(worker);
}
}
private Worker Transliterate(Worker worker)
{
//dictionary that replaces character for character and returns worker
}
此示例有效,但我必须在我的应用程序中手动编写这段代码,这并不能解决我的问题。所以我想只写一次那段代码(比如在拦截器或类似的东西中)。有什么想法吗?
我发现我总是返回 ToList() 方法,所以我创建了一个自定义静态 toList 方法并添加了音译。
public static List<T> ToListCustom<T>(this IEnumerable<T> query)
{
var dataList = query.ToList();
foreach (var ent in dataList)
{
var properties = ent.GetType().GetProperties().Where(v => v.PropertyType.Name == "String");
foreach (var pop in properties)
{
var sValue = pop.GetValue(ent, null).ToString();
pop.SetValue(ent, MyTransliterationConverter(sValue), null);
}
}
return dataList;
}
我有一个包含 100 多个表的数据库。所有数据都保存为拉丁字符。我想在我的应用程序中将这些数据显示为西里尔字符。我在我的应用程序、LINQ to SQL 组件和 MSSQL 中使用 .NET Framework 4.7.2。我有 tried/read 关于拦截器或包装器(拦截来自我的应用程序的每个 SQL 调用并调用音译字符串的自定义函数)但我无法弄清楚。这甚至有可能实现吗?
示例:
数据库:工人(身份证、姓名、姓氏)
应用程序:
public Worker GetWorker(int workerId){
using (var db = new DB())
{
var worker = db.Workers.SingleOrDefault(m => m.Id == workerId);
return Transliterate(worker);
}
}
private Worker Transliterate(Worker worker)
{
//dictionary that replaces character for character and returns worker
}
此示例有效,但我必须在我的应用程序中手动编写这段代码,这并不能解决我的问题。所以我想只写一次那段代码(比如在拦截器或类似的东西中)。有什么想法吗?
我发现我总是返回 ToList() 方法,所以我创建了一个自定义静态 toList 方法并添加了音译。
public static List<T> ToListCustom<T>(this IEnumerable<T> query)
{
var dataList = query.ToList();
foreach (var ent in dataList)
{
var properties = ent.GetType().GetProperties().Where(v => v.PropertyType.Name == "String");
foreach (var pop in properties)
{
var sValue = pop.GetValue(ent, null).ToString();
pop.SetValue(ent, MyTransliterationConverter(sValue), null);
}
}
return dataList;
}