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 . Видать действительно надо пол года пописать провайдер чтобы научиться ТАК манипулировать деревьями выражений.

И с Новым Годом!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.