(.NET 3.5 SP1, VS 2008, VB.NET, MSSQL Server 2008)
Я пишу небольшое веб-приложение для тестирования кхмерского юникода и лаосского юникода. У меня есть таблица, которая хранит текст в кхмерском Unicode со следующей структурой:
[t_id] [int] IDENTITY(1,1) NOT NULL
[t_chid] [int] NOT NULL
[t_vn] [int] NOT NULL
[t_v] [nvarchar](max) NOT NULL
Я могу использовать Linq to SQL для обычного CRUD. Текст корректно отображается на веб-странице, хотя я не изменил параметры сортировки по умолчанию в MSSQL Server 2008.
Когда дело доходит до поиска по столбцу [t_v], страница загружается очень долго и фактически загружает каждую строку этого столбца. Он никогда не сравнивается с критериями «ключевых слов», которые я использую для поиска. Вот мой запрос для поиска:
Public Shared Function SearchTestingKhmerTable(ByVal keyword As String) As DataTable
Dim db As New BibleDataClassesDataContext()
Dim query = From b In db.khmer_books _
From ch In db.khmer_chapters _
From v In db.testing_khmers _
Where v.t_v.Contains(keyword) And ch.kh_book_id = b.kh_b_id And v.t_chid = ch.kh_ch_id _
Select b.kh_b_id, b.kh_b_title, ch.kh_ch_id, ch.kh_ch_number, v.t_id, v.t_vn, v.t_v
Dim dtDataTableOne = New DataTable("dtOne")
dtDataTableOne.Columns.Add("bid", GetType(Integer))
dtDataTableOne.Columns.Add("btitle", GetType(String))
dtDataTableOne.Columns.Add("chid", GetType(Integer))
dtDataTableOne.Columns.Add("chn", GetType(Integer))
dtDataTableOne.Columns.Add("vid", GetType(Integer))
dtDataTableOne.Columns.Add("vn", GetType(Integer))
dtDataTableOne.Columns.Add("verse", GetType(String))
For Each r In query
dtDataTableOne.Rows.Add(New Object() {r.kh_b_id, r.kh_b_title, r.kh_ch_id, r.kh_ch_number, r.t_id, r.t_vn, r.t_v})
Next
Return dtDataTableOne
End Function
Обратите внимание, что я использую тот же код и дизайн базы данных с Lao Unicode, и он работает просто отлично. Я получил возвращенный запрос, как и ожидалось для поиска.
Я не могу понять, в чем проблема с поиском запроса в кхмерской таблице.
Я использовал следующий Linq, чтобы присоединиться к столу:
Dim query = From b In db.khmer_books _
Join ch In db.khmer_chapters On b.kh_b_id Equals ch.kh_book_id _
Join v In db.testing_khmers On ch.kh_ch_id Equals v.t_chid _
Where v.t_v.Contains(keyword) _
Select b.kh_b_id, b.kh_b_title, ch.kh_ch_id, ch.kh_ch_number, v.t_id, v.t_vn, v.t_v
Но я все еще получил все строки из этой таблицы. Любая идея ? Большое спасибо.