Linq нет - выгода весь подобный sql выбор?

Одна из вещей, которые Вы победили в Вас как младший разработчик, - то, что Вы никогда не делаете "ВЫБОР *" на наборе данных, поскольку это ненадежно по нескольким причинам.

Начиная с отодвижения к Linq (во-первых Linq к SQL и затем Платформе Объекта), я задался вопросом, осужден ли эквивалентный Linq одинаково?

Например,

var MyResult = from t in DataContext.MyEntity
               where t.Country == 7
               select t;

Мы должны выбирать в анонимный тип только с полями, которые мы хотим явно упомянутый, или выгода является всем выбором, теперь приемлемым для LinqToSql и др. из-за дополнительного материала, окружающего данные, которые они обеспечивают?

С уважением

Мычание

5
задан Stécy 3 February 2010 в 22:11
поделиться

7 ответов

Это не нахмущено, он определяется вашим применением. Если вы хотите обновить результат и сохранить его, то вы должны выбрать T , однако, если вы не хотите делать это, и просто запросы для целей отображения вы можете сделать его более эффективным, выбрав его Хотите:

var MyResult = from t in DataContext.MyEntity
               where t.Country == 7
               select new { t.Prop1, t.Prop2 };

Это по нескольким причинам. Население анонимного типа немного быстрее, но что более важно его отключает отслеживание изменений ... потому что вы не можете сохранять анонимный тип, нет необходимости отслеживать изменения в этом.

Вот отличное подножение общих областей производительности, таких как это , это здорово при запуске. Он включает в себя более глубокое объяснение отслеживания изменений, которое я только что описал.

5
ответ дан 14 December 2019 в 08:50
поделиться

Вы все равно должны явно заявить, что вы хотите выбрать. Если вы выберете все, вы все еще выбираете гораздо больше данных, чем вам нужно, и по мере добавления новых вещей, вы излишне притягиваетесь. В общем, лучшая практика - тянуть только то, что вам нужно.

0
ответ дан 14 December 2019 в 08:50
поделиться

Возможно, вам следует явно передать запрос в StartFileHandler.

-121--4349538-

Также (для Ника Крейвера пост) гораздо проще добавить новые перечисления.

Это поведение не является уникальным для перечислений. Рассмотрим следующее:

var list = new int[] { 1, 2, 3, };
-121--1174079-

выберите t в данном случае, выбрав все поля известного типа. Он отличается строгой типизацией и менее подвержен тем же ошибкам, что и в SQL.

Например, в SQL

INSERT INTO aTable
SELECT * FROM AnotehrTable

может произойти сбой при изменении AnotherTable , однако в Linq/.Net эта ситуация не возникает.

Если вы присоединяетесь к нескольким таблицам, тогда вы не можете сделать select * в Linq, вам придется создать анонимный тип со всеми типами, содержащимися в.

1
ответ дан 14 December 2019 в 08:50
поделиться

Я бы сказал, что вы делаете, является эквивалентом выбора * . Лучше вернуть только поля, которые вам требуют E.g.

var myResult = from t in DataContext.MyEntity
               where t.Country == 7
               select new T
               {
                   Field1 = t.Field1,
                   Field2 = t.Field2
               }
0
ответ дан 14 December 2019 в 08:50
поделиться

Может быть необходимо сделать это, как в примере, особенно если то, что необходимо сделать, это изменение ряда (ов).

В SQL Select * отличается от LINQ, поскольку LINQ всегда будет возвращать одинаковое количество столбцов (как определено в DBML).

0
ответ дан 14 December 2019 в 08:50
поделиться

Ограничения по умолчанию являются емкостью вашего сервера для обслуживания этих запросов (I.E. CPU, память), хотя вы можете настроить дросселирование и т. Д. В зависимости от ряда одновременных пользователей.

-121--2134466-

Использование LINQ не будет смягчать производительность попадания получения дополнительных полей.

Однако это невозможно для генерации SELECT * из ... с использованием Linq к SQL. Ваш код будет генерировать форму выбора , что явно называет все столбцы, определенные в вашей модели; Это проигнорирует любые изменения в базе данных.

Однако производительность все еще является заботой, поэтому вы должны использовать анонимный тип, если вы используете только некоторые столбцы.

0
ответ дан 14 December 2019 в 08:50
поделиться

Причина избегания выбора * состоит в том, что базовая база данных может измениться и, следовательно, заказы столб могут измениться, что может привести к ошибкам в вашем уровне доступа к данным.

Вы не выполняете выбор * из вашей базы данных, вы просто говорите, что хотите «T» и все, что идет с ним. Нет ничего плохого в том, что если это действительно то, что вам нужно.

1
ответ дан 14 December 2019 в 08:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: