Внутренний выбор запроса и производительность - PullRequest
0 голосов
/ 29 мая 2018

Рассмотрим следующий запрос, приведет ли он к нескольким поездкам в дб для выполнения внутреннего оператора select?

Table1.Select(x=> new{
   x.T1_Name,
   x.T1_Id,
   T2 =x.Table2.Select(y=> new {
      y.T2_Name,
      y.T2_Value
   })
}).ToList();

Я полагаю, что это не так, поскольку это все еще IQueryable и весь запрос будетзапустить на БД и окончательный результат будет передан клиенту.

В LinqPad внутренний запрос вызывает многократный вызов на сервер.

1 Ответ

0 голосов
/ 30 мая 2018

Бьюсь об заклад Table1 - это список, полученный в предыдущем запросе и содержащий ссылку на Table2.Поскольку это список, результаты этого начального запроса были установлены.Однако он не материализовал содержимое результата Table2, поэтому он будет теперь в этих запросах.

Это, вероятно, так:

var Table1 = context.Table1.ToList(); // materialize Table1
var query = Table1.Select(x=> new{
   x.T1_Name,
   x.T1_Id,
   T2 =x.Table2.Select(y=> new { // Table2 not materialized, so do it now
      y.T2_Name,
      y.T2_Value
   })
}).ToList();

Удалите эти ToList() вызовы, пока вына самом деле это нужно.Это мешает поставщику запросов выполнять свою работу.

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