asp.net 根据汉字的拼音首字母搜索数据库(附 LINQ 调用方法)
发布时间:2020-12-15 19:59:48 所属栏目:asp.Net 来源:网络整理
导读:方法一:先查询出所有记录,然后在逻辑层转化为拼音首字母后查询,显然傻瓜才会这么做。 方法二:在需要搜索的表中添加一个字段用于存放被检索字段内容对应的拼音,在搜索的时候同时去查询这两个字段,这种方法可行,但会增加数据库存放的大
方法一:先查询出所有记录,然后在逻辑层转化为拼音首字母后查询,显然傻瓜才会这么做。 方法二:在需要搜索的表中添加一个字段用于存放被检索字段内容对应的拼音,在搜索的时候同时去查询这两个字段,这种方法可行,但会增加数据库存放的大小。 方法三:在数据库中建立一个函数,在执行查询语句时通过此函数来转化搜索,函数如下: 复制代码 代码如下: 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'e' UNION ALL SELECT 'D',N'z' UNION ALL SELECT 'E',N'' UNION ALL SELECT 'F',N'v' UNION ALL SELECT 'G',N'B' UNION ALL SELECT 'H',N'' UNION ALL SELECT 'J',N'h' UNION ALL SELECT 'K',N'i' UNION ALL SELECT 'L',N'w' UNION ALL SELECT 'M',N'' UNION ALL SELECT 'N',N'' UNION ALL SELECT 'O',N'a' UNION ALL SELECT 'P',N'曝' UNION ALL SELECT 'Q',N'' UNION ALL SELECT 'R',N'U' UNION ALL SELECT 'S',N'R' UNION ALL SELECT 'T',N'X' UNION ALL SELECT 'W',N'F' UNION ALL SELECT 'X',N'R' 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; 您可能感兴趣的文章:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 有没有人使用史蒂夫·桑德森的MvcIntegrati
- asp.net-mvc – 将Castle Windsor与SignalR集成 – 我该如何
- asp.net – 如何指定javascript运行时显示ModalPopupExtend
- 无法安装ASP.NET MVC 3 RC
- asp.net – 在Visual Studio 2012中创建控制器时出错
- wcf – ASP.NET MVC中的OpenId身份验证是一项宁静的服务吗?
- 浅谈ASP.NET Core 2.0 布局页面(译)
- asp.net-mvc-2 – 隐藏字段作为ASP.NET MVC2应用程序中的(重
- ASP.NET ViewState的工作原理
- “XmlDocumentationProvider”不实现接口成员“IDocumentat
推荐文章
站长推荐
- 两个单选按钮ASP.NET C#
- asp.net-core – Asp.Net 5 MVC 6 Startup.cs Be
- asp.net – 获取“这种类型的页面不提供”,如何在
- asp.net – IIS 7强制新鲜图像
- asp.net – FindControl()返回null
- asp.net-mvc – 动作命名约定
- asp.net-mvc-3 – RavenDb,无法访问文件,文件被锁
- asp.net-mvc-2 – ASP.NET MVC 2 Area文件夹中有
- asp.net-core – 将命名空间添加到ASP.NET MVC 6
- .net – 何时设置HttpContext.User.Identity?
热点阅读