linq2db и LoadWith
От: Danchik Украина  
Дата: 05.01.16 14:32
Оценка:
Привет, Игорь

Все мне в linq2db нравится и скорость и SQL которые он генерит, но осталось одно но, на которое я развожу руками когда меня спрашивают как использовать linq2db:

LoadWith работает чудесно, но все-таки, то, что выходит из подобного, не всем нравится

            LinqToDB.Common.Configuration.Linq.AllowMultipleQuery = true;

            using (var db = GetDataContext(context))
            {
                var q =
                    from p in db.Parent
                    where p.ParentID < 3
                    select new
                    {
                        p.Value1,
                        Children = p.Children.ToList()
                    };

                var res = q.ToList();
            }


Естественно на каждую запись запускается дополнительный запрос.

Сидел, думу думал и видится мне два варианта решения (пока Take и Skip опускаем):

Первый (почему то кажется мне попроще)


Загрузить всех Parent на клиент, обязательно с небходимым ключом для ассоциации
Запустить BulkCopy и вставить уникальные ключи во временную таблицу (если записей очень много)
Загрузить Children с Join на временну таблицу (или WHERE IN)
Прокинуть загруженных детей в Parent записи на клиенте

Вотрой (EF7 путь)


Загрузить всех Parent на клиент, обязательно с небходимым ключом для ассоциации
Каким то "веселым" способом выделить expression выборки Parent ключей — идей как это сделать пока не появилось
Сделать join детей на этот выделенный expression
Прокинуть загруженных детей в Parent записи на клиенте


Смотрел я в код, чесал репу, но так и не разобрался, погиб в Transform . Видать действительно надо пол года пописать провайдер чтобы научиться ТАК манипулировать деревьями выражений.

И с Новым Годом!
Re: linq2db и LoadWith
От: fedor.reznik  
Дата: 08.03.16 19:55
Оценка:
Здравствуйте, Danchik, Вы писали:

Грм... Беру свои слова обратно, что-то я понял, что в общем, случае я сморозил чепуху )))

Но вот грузить одну дочернюю коллекцию в один запрос было бы прикольно.
Отредактировано 09.03.2016 5:40 fedor.reznik . Предыдущая версия .
Re: linq2db и LoadWith
От: fedor.reznik  
Дата: 09.03.16 05:55
Оценка:
Здравствуйте, Danchik, Вы писали:
Так как редактирование сообщений, что-то отломано, то напишу еще одно в догонку к предыдущему)

"Грм... Беру свои слова обратно, что-то я понял, что в общем, случае я сморозил чепуху )))

Но вот грузить одну дочернюю коллекцию в один запрос было бы прикольно."
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.