Какова самая большая ошибка, которую люди совершают при использовании LINQ?

Каковы основные недоразумения людей, когда они впервые начинают использовать LINQ?

Например, думают ли они, что это одно, когда это действительно что-то еще?

И есть ли некоторые рекомендации, чтобы избежать этих ошибок?

Ответ 1

Чтобы он использовался для всего.

Ответ 2

Неспособность понять различия между (или существованием!):

.First()
.FirstOrDefault()
.Single()
.SingleOrDefault()

Не понимает отложенное выполнение.

Ответ 3

Это относится только к LINQ to SQL

Ответ 4

Самая большая ошибка, которую люди делают при использовании LINQ, такая же, как когда люди пытаются использовать любую технологию, которая лежит поверх технологии, в которой у них нет хорошего заземления.

Если вы не можете понять правильные/эффективные запросы БД, вы будете лишены LINQ.

Если вы не можете понять основные основы ADO.NET и доступа к данным, вы, вероятно, испортите.

Люди думают, что, используя LINQ, они позволят им двигаться, но это не будет.

Ответ 5

Один базовый, который я вижу в LINQ to SQL, не понимает DataContext. Это объект "Единица работы" и должен быть воссоздан для каждой единицы работы.

Ответ 6

Признаки, которые приходят на ум, - это

  • Он должен быть медленнее, лучше использовать обычный С#
  • Попытка использовать его там, где простой С# будет более читабельным/управляемым

Ответ 7

Возможно, одно из неправильных представлений, которое может иметь человек, заключается в том, что способ записи LINQ-запроса, особенно LINQ2SQL, не влияет на производительность. Всегда нужно знать, что происходит в фоновом режиме, если вы намереваетесь написать код с высокой производительностью, иначе вы можете столкнуться с интересными тайм-аутами, OOMexceptions, переполнением стека и такими... =)

Ответ 9

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

Концепция Отложенное исполнение, вероятно, является самой большой добычей и одной из лучших функций. Когда вы используете LINQ, который возвращает IQueryable, важно помнить, что вы НЕ выполняете код, который вы только что написали. Только после того, как вы вызовете один из методов, который выдает другой результат, который выполняется запрос.

Кроме того, с точки зрения провайдера LINQ to SQL, самая большая найденная мной информация - это стоимость исполнения. Оказывается, существует значительная стоимость процессора для построения SQL-запросов, которые возникают каждый раз, когда выполняется запрос LINQ, если вы не предварительно компилируете свои запросы с высокой нагрузкой.

Ответ 10

Я полностью согласен с Адамом Робинсоном, на самом деле ошибка BIG заключается в том, что люди останавливаются на синтаксисе красоты, не углубляясь в технические факты с точки зрения ударов или архитектурных представлений.

Иногда люди думают об этом как о чем-то, когда это действительно другая вещь.. о том, что важно отметить, что Linq является "технологией" и может быть реализована по-разному, каждый из них может по-разному влиять на производительность и дизайн (например), основной синтаксис остается неизменным, но основные вещи могут измениться.

Собственно, начиная с больших и растущих реализаций, нет полного списка лучших практик, лучшие практики могут начинаться с:

  • понимание того, какая реализация будет использоваться (Linq2Sql, Linq2Objects, Linq2CSV, Linq2Excel, Linq2LDAP, Linq2JSON, Linq2Xml, Linq2Xsd и т.д.)
  • затем попытаемся понять, какие основные технологические функции предназначены для выбранной реализации.

Ответ 11

Говоря о себе, важно знать, когда последовательность будет буферизирована или потоковая.

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

Ответ 12

Использование linq2sql для таблиц без первичных ключей (и не определяющих их в дизайнере).

В частности, если они делают обновление, оно ничего не обновляет, и вы не получаете ошибки.

Ответ 13

Многие считают, что LINQ - это "магический SQL", который они могут использовать в коде. Это похоже на SQL, но это совсем другое. Понимая, что это разница и то, что она действительно делает, предотвратит много разочарований.

Ответ 14

Я думаю, что понимание точки выполнения запроса часто является ошибкой (т.е. верьте ей в точке запроса, а не в момент, когда данные впервые доступны), а также убеждение, что только потому, что оно компилирует его для запуска.

Это относится к Linq to SQL.

Фантастический инструмент для Linq - LinqPad от Joe Albahari, позволил мне быстрее изучить Linq. Если у вас его нет, получите его! И я даже не в комиссию;)

Ответ 15

Понимание того, куда вы переходите от Linq2SQL/Entities к Linq2Objects. Понимание того, что есть и что не выполняется в БД, в сравнении с вашим приложением. Зная, когда вы работаете с объектами памяти в сравнении с базовым поставщиком Linq, которые вы используете, а затем зная, как преднамеренно перейти от Linq2SQL к Linq2Objects, когда вам нужно выполнить обработку после запроса, используя функции С#/. NET, не поддерживаемые в вашем провайдера.