|
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
|
||||||||||||
Как правильно составить запрос для поиска телефона24.10.2020, 19:27. Показов 2596. Ответов 37
Метки entity framework core (Все метки)
Хочу использую Expression, сформировать запрос в бд и найти нужный мне телефон. Но такой вариант, описанный по ссылке, ну и перенесу код сюда
Возможно есть более простое решение, как сделать запрос и проигнорировать не числовые символы. Добавлено через 12 минут Нагуглил вариант, возможно, это и будет решением
Только сейчас подумал, нет возможности проверить. Запрос вида replace(/^\d/gi, '') , использовал js синтаксис, так проще сформировать, может подойти. Сделать реплейс в запросе через c#, но вот с формируется-ли запрос, или выполнится на стороне клиента...
0
|
||||||||||||
| 24.10.2020, 19:27 | |
|
Ответы с готовыми решениями:
37
Как правильно составить маску для поиска номеров телефонов? Как правильно составить пост запрос? Для отправки сообщения в чат |
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 25.10.2020, 00:51 | |
|
Телефонный номер - строка цифр.
Вот в БД и определите его как число. А при выборке можете представлять его в нужном шаблоне. Поиск по числовому полю будет очень быстрым. Если нужно по первым цифрам, то можно в Базе рядом с числовым номером держать строковый, к которому применять like. На это поле навесить вторичный индекс.
0
|
|
|
Модератор
|
|
| 25.10.2020, 01:17 | |
|
MsGuns, в родительской теме Разбить строку на множество подстрок я уже предлагал подобное решение: создать производное поле от номера телефона, в котором будут только числовые символы из него и искать по нему обычным Contains (это на C#, как будет в SQL - не знаю).
Но EveKS ответил, что БД не его и он не может влиять на её структуру. Я плохо разбираюсь в БД, может есть какая-то возможность дополнить динамически существующую БД нужными значениями, или создать другую БД связанную с заданной.... Может ещё что-то придумать.
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 25.10.2020, 02:13 | |
|
Элд Хасп,
Просмотрел указанную ветку. 1. Так и не увидел что за тип БД 2. Так и не понял, какие права на БД имеет ТС. 3. При чем тут DataBase First ? Можно на самом сервере создать все, что угодно, включая индексы, хранимки и т.д. Нельзя прикрутить поле к базовой таблице ? И что - конец света ? Можно создать View с требуемым цифровым полем например и ее уже промапировать в Модель, которой и совать like. 4. Может, я чего-то не понял, но мне показалось, что ТС пытается на 90% оптимизировать код на клиенте, т.е. в шарпе. Это не хорошее решение - надо долбать сервер. Вторичные индексы, UDF, планы запросов, временные таблицы, курсоры и т.д. - вариантов миллион.
0
|
|
|
Модератор
|
||||
| 25.10.2020, 02:19 | ||||
|
Только слова самого ТС:
0
|
||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 25.10.2020, 02:40 | |
|
Когда-то решал подобную задачку на большой базе (по тем временам большой - что-то около 500000 записей). Надо было поиск по фамилиям убыстрить. БД была допотопной - Paradox. Решение нашли введя дополнительный ключ-поле - первые 2 буквы фамилий.
Скорость сразу же резко возросла. С базами работаю с начала 90-х. Понял одно железно - лучше и быстрее, чем сервер, поиск в базе никто не выполнит. Поэтому надо правильно проектировать базы данных + использовать по максимуму возможности SQL-серверов. Добавлено через 2 минуты Элд Хасп, Вы дали правильное направление. Я тоже не эксперт, просто есть некоторый опыт работы с разными SQL-серверами. И как прикладной программист и как архитектор СУБД. Добавлено через 9 минут Тут еще вот какая штукенция. Вовсе не эксперт, но кое-что могу подсказать. Полнотекстовый поиск (а like именно к нему и относится, особенно если еще насовать в запрос разные касты и реплейсы) - одна из "ахиллесовых пят" большинства SQL-серверов. ORACLE, например, решает эту задачу чуть ли не лучше всех. Но этот сервер весьма чувствителен к "тонкой" настройке запросов, а именно играм с планами запросов. Эффект может быть просто фантастичен - на своем опыте знаю Но тут нужен спец в оракле ![]() MS SQL с длинными строками работает заметно хуже - помогают вторичные индексы или распараллирование запросов - но тут тоже нужны эксперты. My SQL - просто телега по сравнению с первыми двумя. Хотя, возможно, за последние 10 лет ситуация поменялась ![]() PostgeSQL - добротный легкий надежный "байк" - базы до 1млн записей крутит не хуже оракла, включая полнотекстовый. InterBase(Firebird) - давно с ним не работал, но ребята говорили, что не оракл, конечно, но с мелкомягким вполне спорит. Добавлено через 1 минуту В общем, я бы советовал ТС сходить на SQL.ru или даже на Стэк - там водятся монстры по базам ![]() Добавлено через 7 минут Тут вот подумал еще.. Может не лишним будет ![]() Многажды проектировал базы, где были телефонные номера. Но ни разу не помню, чтобы кому-то приходило в голову требовать интерфейс с поиском или фильтрацией данных по номерам телефонов. Ищут обычно по фамилии, адресу, конторе и т.д. Возможно, ТС что-то не договаривает, шифруется
0
|
|
|
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
|
|
| 25.10.2020, 08:16 [ТС] | |
|
MsGuns, спасибо за слова
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|||
| 25.10.2020, 12:25 | |||
|
Пример не удачный ![]()
0
|
|||
|
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
|
|||||||
| 25.10.2020, 23:14 [ТС] | |||||||
|
MsGuns,
Поэтому, не в обиду, но это простой разговор.
Если 7оворить о том, что можно было бы... То самое простое, это или вьюаер или функция, функция была бы лучшим вариантом. Ибо речь о формировании iquerible через expression. Вьювер это лишнее, ибо пришлось ещё и его бы поддерживать. Но это можно было бы, но не в этом случае. Не по теме: писал с тклефона
0
|
|||||||
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|||
| 26.10.2020, 01:07 | |||
![]() Еще бы поподробнее о формализации условий выборки, ибо в топике как-то очень уж "универсально". Неужели есть необходимости искать по фрагментам-серединкам ? Т.е. номер, содержащий '123' где-то посередине, а не в начале и не в конце. Вы уж простите, но я действительно не понимаю зачем такое нужно Разве что заказчик требует, а его "каприз" - наши проблемы ![]() И еще хотя бы примерно размеры таблицы (порядок в нулях) Добавлено через 4 минуты Добавлено через 8 минут Ясно одно (для меня во всяком случае) - решить такую задачу (оптимизацию) средствами "штатной" ORM (например EF) крайне сложно, если вообще возможно. Можно, например, соорудить скрипт для рулежки сервером как надо, т.е. фактически написать SQL-программу, которую запускать через SQLClient, а результат уже пихать в модель. И что за SQL-сервер ? Если MS SQL, то я бы попробовал смоделировать вариантик.
0
|
|||
|
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
|
|||
| 26.10.2020, 13:40 [ТС] | |||
|
MsGuns,
Так, в очередной раз, нельзя влиять на ДБ Пока меня устроил вариант с Regex.Replace(x.Phone ?? "", @"[^\d]", "")Быстрее не стало, но теперь не ест память (уже прогресс) ----- Думаю, если у бизнеса возникнет вопрос, а как ускорить, тогда я полезу в бд. Сейчас же, это чисто моя хотелка, ибо вариант с генерацией вариантов, красивый, но запросы очень большие, я о генерируемых sql запросах.
0
|
|||
|
14098 / 9315 / 1349
Регистрация: 21.01.2016
Сообщений: 34,991
|
|
| 26.10.2020, 13:43 | |
|
EveKS, а кто и на что вообще память ест-то?
0
|
|
|
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
|
||
| 26.10.2020, 13:47 [ТС] | ||
|
Usaga,
0
|
||
|
14098 / 9315 / 1349
Регистрация: 21.01.2016
Сообщений: 34,991
|
|
| 26.10.2020, 13:51 | |
|
0
|
|
|
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
|
||
| 26.10.2020, 13:52 [ТС] | ||
|
Usaga,
0
|
||
|
14098 / 9315 / 1349
Регистрация: 21.01.2016
Сообщений: 34,991
|
|
| 26.10.2020, 13:54 | |
|
EveKS, я в исходной задаче не вижу такого требования.
0
|
|
|
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
|
||
| 26.10.2020, 13:58 [ТС] | ||
|
Usaga,
Сомневаюсь, что тут сложно понять по иному, кроме как найти количество вариантов. Найти варианты.
0
|
||
|
14098 / 9315 / 1349
Регистрация: 21.01.2016
Сообщений: 34,991
|
|
| 26.10.2020, 14:02 | |
|
EveKS, зачем это делать? Вам же нужно только цифры сравнивать? Зачем пытаться составить список всех возможных вариантов номеров с подчёркиваниями, когда можно просто выкидывать подчёркивания и сравнивать только цифры?
Добавлено через 2 минуты Кстати, а номера телефонов хранятся в своём отдельном поле или где-то в теле большего текста?
0
|
|
|
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
|
|
| 26.10.2020, 14:02 [ТС] | |
|
Usaga, хорошо, как засунуть это в iqueryable условие? Кроме как регулярной
0
|
|
| 26.10.2020, 14:02 | |
|
Помогаю со студенческими работами здесь
20
Как правильно составить GET-запрос к RIPE NCC, чтобы получить поля "descr" и пр. для IP Как правильно составить запрос? Как правильно составить запрос Как составить правильно запрос Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|