Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Задать правильное условие с помощью LINQ

#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, то наверное, надо пересмотреть структуру данных и хранить отдельные слова с идентификатором предложения.

Комментариев нет:

Отправить комментарий