国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

asp.net 根據漢字的拼音首字母搜索數據庫(附 LINQ 調用方法)

2024-07-10 12:42:14
字體:
來源:轉載
供稿:網友
方法一:先查詢出所有記錄,然后在邏輯層轉化為拼音首字母后查詢,顯然傻瓜才會這么做。

方法二:在需要搜索的表中添加一個字段用于存放被檢索字段內容對應的拼音,在搜索的時候同時去查詢這兩個字段,這種方法可行,但會增加數據庫存放的大小。

方法三:在數據庫中建立一個函數,在執行查詢語句時通過此函數來轉化搜索,函數如下:

代碼如下:
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;
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平陆县| 普兰县| 仪征市| 昌黎县| 上蔡县| 新昌县| 丰镇市| 深泽县| 满洲里市| 庆城县| 高尔夫| 专栏| 重庆市| 获嘉县| 临猗县| 措勤县| 黑龙江省| 鄂托克前旗| 沈阳市| 林州市| 淳化县| 海宁市| 新余市| 永宁县| 丰台区| 宣汉县| 广汉市| 合水县| 且末县| 鲁山县| 凤城市| 沧州市| 集贤县| 海原县| 阳信县| 富民县| 南和县| 漠河县| 庆云县| 宁强县| 丰台区|