Linq FirstOrDefault (<condition>). Атрибут vs Where (<condition>). Select (a => Attribute) .FirstOrDefault () - PullRequest
2 голосов
/ 29 мая 2020

Я очищал старый код и наткнулся на несколько запросов следующей структуры:

var attribute = DbSet.Where(<condition>).Select(a => a.Attribute).SingleOrDefault();

и, пытаясь сделать код более читабельным, я бы изменил это на:

var attribute = DbSet.SingleOrDefault(<condition>).Attribute;

, следовательно, сокращение оператора.

Но теперь мне интересно, какой из двух лучше для производительности, а какой лучше для управления памятью.

1 Ответ

2 голосов
/ 29 мая 2020

Это зависит от обстоятельств. DbSet.SingleOrDefault(<condition>).Attribute будет извлекать всю строку из базы данных и передавать ее по сети вашему приложению. Поэтому, если в вашей таблице много столбцов и / или столбцов, содержащих много данных (большие строки, некоторые двоичные данные), тогда сначала нужно быстрее, потому что он будет извлекать только те данные, которые действительно необходимы.

Также обратите внимание, что SingleOrDefault может возвращать null, поэтому без проверки на null вы можете получить NullReferenceException.

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