В чем разница между этими двумя утверждениями
Первый возвращает отфильтрованную последовательность исходного / полного исходного объекта; вторая по-прежнему выполняет фильтрацию, но возвращает последовательность анонимного типа с просто этими тремя свойствами.
Есть ли какие-либо проблемы с производительностью в этих заявлениях
Производительность зависит от серверной части. Если это LINQ-to-Objects, то с помощью new {...}
вы создаете дополнительные объекты (анонимные типы) для каждой записи, поэтому могут быть очень небольшие накладные расходы. Однако, если это LINQ-to-SQL и т. Д. (Серверная часть базы данных), это может быть огромным преимуществом . Построитель запросов проверит, какие столбцы нужны, и выберет только три в вашем anon-типе; если у вас есть (например) BLOB (или просто длинный varchar
) в ваших данных, которые вам не нужны, это может быть огромным преимуществом.
Дополнительные примечания: вы не можете включать анонимные типы в сигнатуру метода, поэтому вам может потребоваться объявить для этого собственный тип DTO:
return new CustomerDto { Company = c.Company, Entered = c.Entered, PK = c.pk};
...
public class CustomerDto { ... }