c # динамический sql цикл через серверную команду или linq - PullRequest
0 голосов
/ 13 ноября 2018

Учитывая набор данных, где вы будете знать только соответствующие поля во время выполнения. Я хочу выбрать каждую строку данных для анализа через цикл. Что лучше:

  1. запустить прямой SQL-запрос, чтобы каждый раз получать строку, напрямую открывая и закрывая базу данных

  2. вытянуть все соответствующие строки в таблицу данных перед циклом, затем выбрать их через linq из цикла

Например, я читаю в файле, который говорит, что ищите строки ab и c, тогда мой запрос становится «SELECT col1, col2, col3 ИЗ таблицы WHERE col1 = 'a' или col1 = 'b' или col1 = 'c «» Но я не знаю, что это будет a, b, c во время компиляции, только после запуска программы

Спасибо

редактировать: лучше с точки зрения или скорости и лучших практик

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

StackOverflow на самом деле не для вопросов «лучшего» типа, потому что они обычно очень субъективны / основаны на мнениях / приводят к аргументам. Однако мы свободны решать, следует ли отвечать на субъективные вопросы, и это один из тех, которые (по моему мнению) может

Я бы сказал, что в 99% случаев лучше оставить данные в базе данных и запрашивать их, используя встроенные в базу данных функции SQL. Причина в том, что базы данных специально созданы для хранения и запроса данных. Несколько нелепо заключить, что это правильное использование ресурсов для передачи 100 миллионов строк по сети в плохо спроектированный контейнер для хранения данных, а затем наивный поиск по нему с помощью loop-in-a-loop (что и происходит в linq). цикл был бы), когда вы могли бы оставить его в специализированном, хорошо проиндексированном, мощном программном обеспечении уровня предприятия (на оборудовании корпоративного уровня), где оно в настоящее время находится, и запросить извлечение крошечного подмножества этих записей для передачи по (медленная) сетевая связь в клиенте с ограниченным питанием

0 голосов
/ 13 ноября 2018

в зависимости от того, сколько времени занимает ваш анализ, базовой транзакционной блокировки (если есть) и ресурсов, заблокированных удержанием набора результатов на сервере БД, это либо 1, либо 2 ... но для меня 2 кажется довольно маловероятным ( гигантские наборы результатов, которые открыты в течение длительных периодов времени и будут занимать память в вашей системе БД, что само по себе предложит вам переосмыслить весь рабочий процесс обработки данных) ... я бы просто создал SQL во время выполнения, которое даже возможно использование linq непосредственно для вашей БД (см. «Entity Framework»), и только если у меня возникнут серьезные проблемы с производительностью после запуска, я бы реорганизовал ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...