Здравствуйте, zelenprog, Вы писали:
Z>Я пока пользуюсь sqlite.
Z>Как мне кажется, там кроме временных таблиц ничего другого нельзя применить.
Простите, но с чего вы это взяли?
Z>Кроме того, из БД нужно выбрать и аналоги и упаковки для одного и того же списка товаров.
Z>То есть все равно придется выполнить два запроса. Значит, список товаров должен каким-то образом быть "общим".
Ну вот он так и делается "общим": в него встраивается один и тот же запрос, получающий ID товаров.
Z>Поэтому мне кажется, что все-таки лучше этот список товаров предварительно положить куда-то на sql-сервер, чтобы затем выполнить эти два запроса, использующие этот "общий" список товаров.
Z>Зачем его дважды гонять туда-сюда на сервер?
У вас же sqlite, никакого "гоняния" нету.
Z>Куда его положить, кроме как во временную таблицу?
В сам запрос.
Z>Наверно это можно решить добавлением нового поля во временную таблицу типа "ID_сессии".
Я же говорю — можно обложить костылями. Когда вы будете чистить эти временные таблицы?
Z>А как это — "единый запрос"?
SELECT * FROM analogs WHERE analog.tovar_id IN (select * from tovar where ...)
Z>Я читал про linq, но по сути не знаю.
Z>Если при вызове функций репозиториев "GetList" формируются только запросы, то в какой момент они выполняются?
Z>По какой-то отдельной команде?
В тот момент, когда запрос начинают "перебирать" как IEnumerable.
Z>Так как у меня sqlite,
Дело не в sqlite. Linq2db прекрасно и с sqlite работает.
Просто построить нормальный аналог linq на платформе, которая его не поддерживает — малореальное удовольствие.
Z>Ленивые запросы — это и есть "отложенное" манипулирование запросами?
Да.
S>>... то можно обойтись простым вариантом, в котором AnalogRepository при построении GetListByTovars(IEnumerable<Tovar>) просто берёт и строит список ID переданных ему товаров: SELECT * FROM analogs WHERE analog.tovar_id IN (4, 8, 15, 16, 23, 42)
S>>Здесь нет никакой временной таблицы и связанных с ней проблем.
Z>А если список товаров очень большой? ID-шники задаются в виде GUID-ов, то есть очень длинные.
Что такое "очень большой"?
Z>Строка запроса по списку 1000 товаров превысит все допустимые размеры.
У sqlite "допустимые размеры" — 1 000 000 0000 символов. Подозреваю, что запрос на 1000 товаров их не превысит.