#c_sharp #winforms #linq #linq2sql
Есть БД из одной таблицы, в которой 3 поля: ID, англ слово, перевод. Для одной из задач я считываю только глаголы с помощью такого выражения(у меня все глаголы начинаются с частички "To") words = wordsfromDB.Where(w => w.EnglishWord.StartsWith("To")).ToList(); Сейчас я хочу реализовать возможность считывать только фразовые глаголы, то есть значение "To give" не считается, а значение "To give up" считается. То есть он должен считывать все записи, которые начинаются на "To" и которые имеют минимум 3 слова. Помогите составить верное условие.
Ответы
Ответ 1
Не используйте регулярные выражения без особой на то необходимости. Как в чистом SQL, так и в "LINQ to SQL", для подобных запросов существует оператор LIKE, тоже позволяющий выполнять отбор по текстовым шаблонам: words = wordsfromDB.Where(w => SqlMethods.Like(w.EnglishWord, "To % up")).ToList(); Выполняется он на порядок быстрее несвойственных для SQL "костылей" с регулярными выражениями. А вообще, по задаче - посмотрите на полнотекстовый поиск. Там как расширенные текстовые запросы, так и граматическо-словарные ядра, причем не только для английского.Ответ 2
Если база данных будет расти, то вместо того, чтобы загружать данные в приложение для последующей обработки, можно выполнять обработку на сервере. В SQL Server есть CLR, и можно определить UDF (user defined function) на C#. UDF выполняется на сервере. Описание и примеры - тут. UPDATE: Если в базе данных хранятся отдельные предложения, а для выборки предложений не подходит LIKE, то наверное, надо пересмотреть структуру данных и хранить отдельные слова с идентификатором предложения.
Комментариев нет:
Отправить комментарий