С помощью ключевого слова new
они создают анонимный объект только с этими четырьмя полями. Возможно, у Orders есть 1000 полей, и им нужно всего 4 поля.
Если вы делаете это в LINQ-to-SQL или Entity Framework (или других подобных ORM), SELECT
, который он создаст и отправит на SQL Server, загрузит только эти 4 поля (обратите внимание, что NHibernate не точно поддерживать проекции на уровне БД. Когда вы загружаете объект, вы должны загрузить его полностью). Меньше данных, передаваемых по сети И существует небольшая вероятность того, что эти данные содержатся в индексе (загрузка данных из индекса обычно быстрее, чем загрузка из таблицы, поскольку таблица может иметь 1000 полей, в то время как индекс может содержать ТОЧНО эти 4 поля).
Операция выбора только некоторых столбцов в терминологии SQL называется PROJECTION
.
Конкретный случай: допустим, вы строите файловую систему поверх SQL. Поля:
- имя файла VARCHAR (100)
- данные BLOB
Теперь вы хотите прочитать список файлов. Простой SELECT filename FROM files
в SQL. Было бы бесполезно загружать data
для каждого файла, в то время как вам нужен только filename
. И помните, что часть data
может «весить» мегабайты, а часть filename
может содержать до 100 символов.
Прочитав, сколько «забавы» использует new
с анонимными объектами, не забудьте прочитать, что написано @pleun
, и помните: ORM похожи на айсберги: 7/8 их работы скрыты под поверхностью и готовы чтобы откусить тебя назад.