本方案采用微软官方语言包
ChnCharInfo.dll 用于获取首字母
文件夹中的压缩包为官方包,包括日文、繁体等 。 用法一样
用哪个就安装到 C:\Program Files (x86)\Microsoft Visual Studio International Pack 文件夹下
安装完会出现对应的文件夹,拿到.dll结尾的 放入项目的bin文件夹中
)
根据汉子获取拼音
先将 ChnCharInfo.dll 放入项目的bin文件夹中
在程序中引入@using Microsoft.International.Converters.PinYinConverter
@using System;
@using Microsoft.International.Converters.PinYinConverter
1 public classSurNAME2{3 public string name { get; set; }4 public string pinying { get; set; }5}6 ///
7 ///汉字转化为拼音首字母
8 ///
9 /// 汉字 赵钱孙里王
10 /// 首字母
11 public static List GetFirstPinyin(stringstr)12{13 List surnamelist = new List();14 foreach (char obj instr)15{16 SurNAME surname = newSurNAME();17 try
18{19 ChineseChar chineseChar = newChineseChar(obj);20 string t = chineseChar.Pinyins[0].ToString();21 surname.name =obj.ToString();22 surname.pinying= t.Substring(0, 1);23}24 catch
25{26 surname.name =obj.ToString();27}28surnamelist.Add(surname);29}30 returnsurnamelist;31 }
直接调用 var PyList=GetFirstPinyin("赵钱孙李王");
程序使用实例
数据库:mysql
需求:按数据表中的 姓名 添加首字母列
ID 主键
NAME 姓名
FIRSTNAME首字母
1 var SUBNAMELIST = Repository.Current.ExecuteQuery(String.Format("select distinct left(NAME, 1)NAME from {0}_table1 where FIRSTNAME is null", Repository.Current.Name),CommandType.Text).ToList();//数据表中没有首字母的姓
2 if (SUBNAMELIST.Count != 0)3 {//首字母为空的数据 查出的数据为去重后姓名的姓4 var SUBNAME = "";5 foreach (var item inSUBNAMELIST)6 {7 SUBNAME += item["NAME"];//例:赵钱孙李8 }9 var First =GetFirstPinyin(SUBNAME);//调用转拼音的方法10 var SqlSet = "(case left(NAME, 1)";//拼接修改的sql语句 会将表中首字母列为空的数据修改11 var SqlWhere = "find_in_set(left(NAME,1),'";12 foreach (var surnamelist inFirst)13 {14 SqlSet += "when '" + surnamelist.name + "' then '" + surnamelist.pinying + "'";15 SqlWhere += surnamelist.name + ",";16 }17 SqlSet += "end )";18 SqlWhere += "')";19 var upsql = string.Format("update {0}_table1 set FIRSTNAME={1} where FIRSTNAME is null AND {2}", Repository.Current.Name, SqlSet, SqlWhere);20 Repository.Current.ExecuteNonQuery(upsql, CommandType.Text);//执行sql21 };
跪求路过的大神指点!!!