asp.net 根据汉字的拼音首字母搜索数据库(附 LINQ 调用方法)

 更新时间:2010年04月25日 21:43:59   作者:  
我们经常需要使用拼音首字母来检索数据库,特别是应用于医院、商店等行业软件中。譬如搜索“zgr”就可以搜索所有包含“中国人”的记录。那么如果来实现才能即高效又方便呢?
方法一:先查询出所有记录,然后在逻辑层转化为拼音首字母后查询,显然傻瓜才会这么做。

方法二:在需要搜索的表中添加一个字段用于存放被检索字段内容对应的拼音,在搜索的时候同时去查询这两个字段,这种方法可行,但会增加数据库存放的大小。

方法三:在数据库中建立一个函数,在执行查询语句时通过此函数来转化搜索,函数如下:

复制代码 代码如下:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: xoyozo
-- Create date: 2010-4-17
-- Description: 提供中文首字母
-- =============================================
CREATE FUNCTION fun_getPY
(
@str NVARCHAR(4000)
)
RETURNS NVARCHAR(4000)
AS
BEGIN
DECLARE @word NCHAR(1),@PY NVARCHAR(4000)
SET @PY=''
WHILE len(@str)>0
BEGIN
SET @word=left(@str,1)
SET @PY=@PY+(CASE WHEN unicode(@word) BETWEEN 19968 AND 19968+20901
THEN (SELECT TOP 1 PY FROM (
SELECT 'A' AS PY,N'驁' AS word
UNION ALL SELECT 'B',N'簿'
UNION ALL SELECT 'C',N'錯'
UNION ALL SELECT 'D',N'鵽'
UNION ALL SELECT 'E',N'樲'
UNION ALL SELECT 'F',N'鰒'
UNION ALL SELECT 'G',N'腂'
UNION ALL SELECT 'H',N'夻'
UNION ALL SELECT 'J',N'攈'
UNION ALL SELECT 'K',N'穒'
UNION ALL SELECT 'L',N'鱳'
UNION ALL SELECT 'M',N'旀'
UNION ALL SELECT 'N',N'桛'
UNION ALL SELECT 'O',N'漚'
UNION ALL SELECT 'P',N'曝'
UNION ALL SELECT 'Q',N'囕'
UNION ALL SELECT 'R',N'鶸'
UNION ALL SELECT 'S',N'蜶'
UNION ALL SELECT 'T',N'籜'
UNION ALL SELECT 'W',N'鶩'
UNION ALL SELECT 'X',N'鑂'
UNION ALL SELECT 'Y',N'韻'
UNION ALL SELECT 'Z',N'咗'
) T
WHERE word>=@word COLLATE Chinese_PRC_CS_AS_KS_WS
ORDER BY PY ASC) ELSE @word END)
SET @str=right(@str,len(@str)-1)
END
RETURN @PY
END



使用方法:
复制代码 代码如下:

select * from 表 where fun_getPY(字段) like N'%zgr%'



此方法是最快捷方便的,通过测试在文章表中搜索标题首字母,其耗时大约为不使用此函数搜索的 3 倍,相信部署在小数据量的项目中的成本是非常低的。

LINQ 方式操作
初学 LINQ 的朋友或许对 .dbml 文件不是很熟悉,数据库中的表可以直接拖动到 .dbml 的左侧,而存储过程、函数等可以直接拖到其右侧,然后就可以直接在逻辑使用了,下面是例子:
复制代码 代码如下:

DataClasses1DataContext db = new DataClasses1DataContext();
var q = from d in db.Documents
where d.Title.Contains("zgr") || db.fun_getPY(d.Title).Contains("zgr")
select d;

相关文章

  • .NET8 依赖注入

    .NET8 依赖注入

    依赖注入是一种设计模式,用于解耦组件(服务)之间的依赖关系,它通过将依赖关系的创建和管理交给外部容器来实现,而不是在组件(服务)内部直接创建依赖对象,本文介绍.NET8 依赖注入的相关知识,感兴趣的朋友一起看看吧
    2023-12-12
  • .NET Windbg分析某妇产医院WPF内存溢出

    .NET Windbg分析某妇产医院WPF内存溢出

    这篇文章主要为大家介绍了.NET  Windbg分析某妇产医院WPF内存溢出,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • asp.net B2B网站对接支付宝接口

    asp.net B2B网站对接支付宝接口

    首先,网上购物系统必须与支付宝公司签订合作协议,以确保从本购物网站上传到
    2010-06-06
  • ASP.NET中Request.Form中文乱码的解决方法

    ASP.NET中Request.Form中文乱码的解决方法

    一直以为,只有 Request.QueryString 接收url查询字符串含中文时可能会乱码(做好编解码工作,很容易可以避免),碰到的时候,才知道 Request.Form 接收表单的值中含中文也会乱码,以前真是很傻很天真很无知。
    2011-03-03
  • 在.net项目使用JSONSchema示例详解

    在.net项目使用JSONSchema示例详解

    这篇文章主要为大家介绍了在.net项目使用JSONSchema的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Visual Studio 2017中找回消失的“在浏览器中查看”命令

    Visual Studio 2017中找回消失的“在浏览器中查看”命令

    这篇文章主要为大家详细介绍了如何在Visual Studio 2017中找回消失的“在浏览器中查看”命令,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • ASP.Net 图片存入数据库的实现代码

    ASP.Net 图片存入数据库的实现代码

    在很多时候,我们有这样的需求:把图片存入到数据库当中。在一些应用程序中,我们可能有一些敏感的资料,由于存储在文件系统(file system)中的东西,将很容易被某些用户盗取,所以这些数据不能存放在文件系统中。
    2008-11-11
  • ASP.NET Gridview 中使用checkbox删除的2种方法实例分享

    ASP.NET Gridview 中使用checkbox删除的2种方法实例分享

    ASP.NET Gridview 中使用checkbox删除的2种方法实例分享,需要的朋友可以参考一下
    2013-06-06
  • firebird Embedded模式(.net 3.5)

    firebird Embedded模式(.net 3.5)

    实现的关键:copy fbembed.dll icudt30.dll icuuc30.dll到system32文件夹下
    2008-12-12
  • ASP.NET MVC5网站开发之登录、验证和注销管理员篇1(六)

    ASP.NET MVC5网站开发之登录、验证和注销管理员篇1(六)

    这篇文章主要介绍了ASP.NET MVC5网站开发之管理员登录、验证和注销,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08

最新评论