Влияние на производительность использования DefaultIfEmpty на Linq Join - PullRequest
0 голосов
/ 28 марта 2019

Я играл с левыми соединениями в linq и обнаружил, что необходимо использовать DefaultIfEmpty(), чтобы изменить соединение с inner на left.

Глядя на тип возвращаемого значения DefaultIfEmpty(), я стал беспокоиться с точки зрения производительности, поскольку вижу, что он возвращает IEnumerable, который, как мы знаем, кэширует данные локально ,В моем сценарии я продолжаю обрабатывать данные, оставленные присоединением, и в идеале хотел бы вместо этого сохранить тип как IQueryable, однако, когда я развернул решение в своей среде разработки, я был удивлен, увидев нелогичный /минимальное влияние на производительность.

Почему DefaultIfEmpty() не оказывает существенного влияния на производительность, или я неправильно понимаю ситуацию?

Редактировать: Ниже мой код: enter image description here

1 Ответ

2 голосов
/ 28 марта 2019

Термические перегрузки IQueryable и IEnumerable равны DefaultIfEmpty().Версия IEnumerable используется в памяти Linq и версия IQueryable с выражениями, например, с EF.

Если вы начали с Queryable и в итоге получили IEnumerable, то вы потребляете свой Queryable где-то вдольлиния

enter image description here

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