如何实现输入一个字母,查询出这个字母开头的名字?

cydall 2011-06-21 09:54:18
.net+MSSQL
...全文
566 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
老毕 2011-06-21
  • 打赏
  • 举报
回复
还找到一张表,但是用该表后,结果不正确,张三找不出来


// 'A'; //45217..45252
// 'B'; //45253..45760
// 'C'; //45761..46317
// 'D'; //46318..46825
// 'E'; //46826..47009
// 'F'; //47010..47296
// 'G'; //47297..47613

// 'H'; //47614..48118
// 'J'; //48119..49061
// 'K'; //49062..49323
// 'L'; //49324..49895
// 'M'; //49896..50370
// 'N'; //50371..50613
// 'O'; //50614..50621
// 'P'; //50622..50905
// 'Q'; //50906..51386

// 'R'; //51387..51445
// 'S'; //51446..52217
// 'T'; //52218..52697
//没有U,V
// 'W'; //52698..52979
// 'X'; //52980..53640
// 'Y'; //53689..54480
// 'Z'; //54481..55289
老毕 2011-06-21
  • 打赏
  • 举报
回复
弄了一张表,完全没有按值的大小排列啊,哈哈。

A 516b 八
B 5693 嚓
C 5491 咑
D 59b8 妸
E 53d1 发
F 65ee 旮
G 94ea 铪
H 8ba5 讥
J 5494 咔
K 5783 垃
L 5452 呒
M 62cf 拏
N 5662 噢
O 5991 妑
P 4e03 七
Q 4ebd 亽
R 4ee8 仨
S 4ed6 他
T 54c7 哇
W 5915 夕
X 4e2b 丫
Y 5e00 帀
Z 5497 咗



网上倒是有一篇拼音排序的:http://www.cnblogs.com/ma/archive/2007/06/14/783759.html
该文用了一个完整的汉字清单……
yuxh81 2011-06-21
  • 打赏
  • 举报
回复
拼音简码 + 自动完成
老毕 2011-06-21
  • 打赏
  • 举报
回复
我提供的那个字典里,“张”的编码其实是错的,呵呵。

15楼wxr0323提供的这段Compare,可能就是拼音排序的那个起始字吧。我再试试把这个做成一个字典,再来一遍上面的测试。
老毕 2011-06-21
  • 打赏
  • 举报
回复
原来另有要求。下次建议把问题写得再清楚一点,呵呵。

对输入法和字符集没有研究,不过记得GB2130里是有一部分是按照拼音顺序存储的。所以可以的话,利用GB2130方面的知识,找到每个拼音起始的字符编码。比如A比xxxx到xxxx,B从xxxx到xxxx。

然后建一张小表,方便快速查询,主键为字母,值为字符编码下限值。

下面是我写的一段测试代码。原理应该正确,最大的问题是这个字典的准备。

Dictionary<char,int> dicChinese = new Dictionary<char, int>();
dicChinese.Add('A', 0x0010);
dicChinese.Add('B', 0x0120);
//Todo: Add the key-value pair here
dicChinese.Add('L', 0x674e); // 李
dicChinese.Add('W', 0x738b); // 王
dicChinese.Add('Z', 0x9f20); // 张,实际应是0x5f20

string[] names = new string[]{"张三","李四","王二麻子"};

var nameresult = names.Where(n => dicChinese
.Where(c => ((int)n.First()) >= c.Value)
.Last().Key =='L');

foreach(var name in nameresult)
Console.WriteLine(name);

结果:

李四
Sampson890727 2011-06-21
  • 打赏
  • 举报
回复
Jquery+ajax实现,网上有很多,案例演示http://apps.hi.baidu.com/share/detail/16458526
kkbac 2011-06-21
  • 打赏
  • 举报
回复
你给数据库多加一个字段. 用来存用户名的拼音, 查询的时候.判断, 如果是字母,就查询这个字段. 其他就直接查询用户名.
子夜__ 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 guanyelong 的回复:]

lz的意思是 我输入拼音 Z 则 提示时候应 赵XXX 张XX 周XX 吧
[/Quote]
要有查询的库

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace Core
{
/*
* 说明:此类用于将一个字符串找出首字声母,用法:ChineseConvert.UtilIndexCode(str);
*
*
*/
/// <summary>
/// ChineseConvert 的摘要说明
/// </summary>
public class ChineseConvert
{
public ChineseConvert()
{
}
/// <summary>
/// 返回字符串的首写字母字符串
/// </summary>
/// <param name="IndexTxt">需得到首写字母的字符串</param>
/// <returns></returns>
public static String UtilIndexCode(String IndexTxt)
{
string _Temp = null;
for (int i = 0; i < IndexTxt.Length; i++)
_Temp = _Temp + GetOneIndex(IndexTxt.Substring(i, 1));
return _Temp;
}

//得到单个字符的首字母
private static String GetOneIndex(String OneIndexTxt)
{
if (Convert.ToChar(OneIndexTxt) >= 0 && Convert.ToChar(OneIndexTxt) < 256)
return OneIndexTxt;
else
return GetGbkX(OneIndexTxt);
}

//根据汉字拼音排序得到首字母
private static string GetGbkX(string str)
{
if (str.CompareTo("吖") < 0)
{
return str;
}
if (str.CompareTo("八") < 0)
{
return "A";
}

if (str.CompareTo("嚓") < 0)
{
return "B";
}

if (str.CompareTo("咑") < 0)
{
return "C";
}
if (str.CompareTo("妸") < 0)
{
return "D";
}
if (str.CompareTo("发") < 0)
{
return "E";
}
if (str.CompareTo("旮") < 0)
{
return "F";
}
if (str.CompareTo("铪") < 0)
{
return "G";
}
if (str.CompareTo("讥") < 0)
{
return "H";
}
if (str.CompareTo("咔") < 0)
{
return "J";
}
if (str.CompareTo("垃") < 0)
{
return "K";
}
if (str.CompareTo("呒") < 0)
{
return "L";
}
if (str.CompareTo("拏") < 0)
{
return "M";
}
if (str.CompareTo("噢") < 0)
{
return "N";
}
if (str.CompareTo("妑") < 0)
{
return "O";
}
if (str.CompareTo("七") < 0)
{
return "P";
}
if (str.CompareTo("亽") < 0)
{
return "Q";
}
if (str.CompareTo("仨") < 0)
{
return "R";
}
if (str.CompareTo("他") < 0)
{
return "S";
}
if (str.CompareTo("哇") < 0)
{
return "T";
}
if (str.CompareTo("夕") < 0)
{
return "W";
}
if (str.CompareTo("丫") < 0)
{
return "X";
}
if (str.CompareTo("帀") < 0)
{
return "Y";
}
if (str.CompareTo("咗") < 0)
{
return "Z";
}
return str;
}
}
}
cydall 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 guanyelong 的回复:]
lz的意思是 我输入拼音 Z 则 提示时候应 赵XXX 张XX 周XX 吧
[/Quote]


我是这个意思呀!有没有谁有打包好的,。NET程序?
guanyelong 2011-06-21
  • 打赏
  • 举报
回复
lz的意思是 我输入拼音 Z 则 提示时候应 赵XXX 张XX 周XX 吧
guokaiju520 2011-06-21
  • 打赏
  • 举报
回复
一般来说 都是放个div 然后 调异步... 这个 jq 好像也出了插件的...你可以去jq库 找找...
cydall 2011-06-21
  • 打赏
  • 举报
回复
客户的名字全部是保存在数据库中的。销售员在搜索客户名字的时候,只需要输入拼音首字母就可以了。
老毕 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 benbencode 的回复:]

就这么一个要求用模糊查询不好吗
怎么还弄这么麻烦
linq都弄出来了
[/Quote]
主要没明白他是在数据库端实现,还是应用程序这端。而我理解为在应用程序这边,所以用了Linq,哈哈。
BenBenCode 2011-06-21
  • 打赏
  • 举报
回复
就这么一个要求用模糊查询不好吗
怎么还弄这么麻烦
linq都弄出来了
暖枫无敌 2011-06-21
  • 打赏
  • 举报
回复


LINQ:
...
IList<UserInfo> users = XX.getAllUserInfo();
string s = this.tbName.Text.Trim(); //输入的字符
var result= from user in users
where user.UserName.StartsWith(s)
select user;
foreach(UserInfo u in result)
{
Response.Write(u.UserName+"/"+u.Sex);
}
...
老毕 2011-06-21
  • 打赏
  • 举报
回复
string[] names = new string[]{"Adams","Ajax","Alice","Bob","Candy","Dodge","Dinny"};
string[] result = names.Where(n=>n.StartsWith("D")).DefaultIfEmpty().ToArray();

foreach (string name in result)
Console.WriteLine(name);

结果:
Dodge
Dinny
丰云 2011-06-21
  • 打赏
  • 举报
回复
上面错了,用keyup事件比较好
丰云 2011-06-21
  • 打赏
  • 举报
回复
前台keypressdown="nameKeypress(this.value);"
function nameKeypress(val){
//这里用AJAX把val传回从后台并取得检索到的姓名列表
}
daifei4451 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 foren_whb 的回复:]
var nameList = content.users.Where(p=>p.userName.startWith("a"));
[/Quote]
+1
丰云 2011-06-21
  • 打赏
  • 举报
回复
var nameList = content.users.Where(p=>p.userName.startWith("a"));
加载更多回复(4)

62,075

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧