Ответ 1
Лично я не понимаю, почему вы не хотите его использовать, он делает код более читаемым.
С учетом сказанного, LINQ иногда может нанести ущерб производительности в определенных сценариях, и это будет только моей причиной не использовать его.
Есть ли хорошие причины не использовать LINQ в моих проектах? Мы используем .Net 3.5 и VSTO 3.0.
Лично я не понимаю, почему вы не хотите его использовать, он делает код более читаемым.
С учетом сказанного, LINQ иногда может нанести ущерб производительности в определенных сценариях, и это будет только моей причиной не использовать его.
Другие ответы подразумевали это, но здесь он явно:
Термин "LINQ" может относиться к общему набору технологий для L anguage IN тегированного Q uery. Эти технологии позволяют преобразовать LINQ Query в дерево выражений. Это дерево может быть выполнено позднее, с помощью "LINQ Provider".
Поставщик LINQ ищет дерево выражений и преобразует его в, например, в операторы SQL или в XML DOM, или через графику объектов. Эти поставщики имеют такие имена, как "LINQ to SQL", "LINQ to Entities", "LINQ to Objects" и т.д.
Могут быть причины не использовать конкретного поставщика.
Многие из отдельных поставщиков LINQ поставляются с дополнительными инструментами (некоторые скажут, "багаж" ). Этот инструмент помогает предоставить некоторые из наиболее распространенных "плюсов и минусов" в отношении LINQ.
В частности, LINQ to SQL обеспечивает прямое, одно к одному сопоставление с схемой базы данных. Каждый класс LINQ соответствует одной таблице базы данных. Если структура базы данных изменяется, то и код. Это можно смягчить, используя представления.
Я считаю, что LINQ to SQL ограничен Microsoft SQL Server. Кроме того, Microsoft заявила, что LINQ to SQL не будет приоритетной инвестицией в будущем.
LINQ to Entities является частью ADO.NET Entity Framework (EF). EF обеспечивает моделирование ваших объектов на более абстрактном, концептуальном уровне. Например, у вас может быть объект Person, который принимает данные из двух таблиц, имеющих сопоставление от одного к одному. Коду, обращающемуся к этому объекту, не нужно беспокоиться о том, как таблицы разбиваются в базе данных.
Я считаю, что LINQ to Entities предназначен для работы со многими поставщиками ADO.NET, а не только с SQL Server. Кроме того, именно здесь Microsoft заявляет, что будет вкладывать свои инвестиции в будущее.
В обоих случаях LINQ для "некоторой базы данных" почти всегда будет иметь место случай, когда опытный разработчик SQL и/или администратор баз данных могут писать более качественные запросы, чем будут созданы LINQ. Если производительность является основным требованием, я считаю, что LINQ to Entities может отображать хранимые процедуры в методы для сущностей.
Большое преимущество этих поставщиков LINQ заключается в том, что вам не нужен этот опытный разработчик SQL или администратор баз данных, когда вы работаете в среде, где производительность не является главным приоритетом. Это освобождает их для оптимизации запросов, которые на самом деле требуют их опыта.
Другая причина не использовать их напрямую - это если у вас есть соображения безопасности, которые не позволяют вашим пользователям иметь разрешения SELECT для таблиц базы данных. В этом случае используйте представления или хранимые процедуры.
Да, есть причины. Я расскажу о некоторых трудностях, с которыми я столкнулся при использовании различных поставщиков LINQ для РСУБД.
LINQ отлично работает в большинстве случаев, но когда вы хотите создавать сложные запросы (например, в приложениях для отчетов), статически типизированный характер становится недостатком. Трудно, например, условно присоединить или условно GROUP BY, потому что тип результата изменяется, даже если в конце вы хотите проецировать те же поля. Это также трудно сделать ЛЕВЫЙ ПРИСОЕДИНЯЙТЕСЬ. Если вы действительно цените динамические запросы, тогда лучше использовать SQL и ESQL.
Кроме того, тот же запрос LINQ может (и обычно) интерпретироваться по-разному в зависимости от поставщика, что может привести к неожиданным результатам при переключении поставщиков.
О функциях SQL, не все функции, которые вам нужны, сопоставляются с методами CLR, и не все поставщики предлагают механизм расширяемости для функций отображения.
Наконец, проблема с производительностью. Преобразование деревьев выражений для хранения запросов может быть дорогостоящим, и иногда конечный результат не является наилучшим возможным запросом. Самый элегантный исходный код не всегда лучший код времени выполнения.
Единственная причина в том, что если у вас очень критичное для производительности приложение, так как запросы LINQ to Objects обычно работают хуже, чем для циклов. Это изменится с .Net 4.0, когда вы сможете использовать функции параллельной обработки PLINQ.
Во всяком случае, если у вас есть такое критически важное приложение, вы, вероятно, не должны использовать управляемую среду. в 99% случаев LINQ сделает ваш код более читабельным и более элегантным. Отложенный механизм выполнения может даже принести вам некоторую производительность при правильных обстоятельствах.
Ну, если вы хотите сделать шаг назад и работать в 2 раза больше своих проектов, вы не должны его использовать; -)
Я думаю, что нет никакой реальной причины НЕ использовать его. Вы быстрее, умнее, и вы можете делать меньше ошибок и иметь больше контроля, так как вы можете работать "datatyped"
В очень короткий ответ: нет, нет причин не использовать Linq. Хотя это может быть немного сложно понять для людей, не знакомых с концепцией функционального программирования (но только немного), как только вы его повесите, вам понравится, и это может в целом значительно улучшить читабельность кода.
Это зависит от того, ссылаетесь ли вы на LINQ на SQL или LINQ в качестве инструмента моделирования. Лично я использую LINQ для моделирования только потому, что мои начальники, которые на самом деле менее образованы, чем я в этой области, отказываются от этого по ряду причин. Одна из причин заключается в том, что они перестали добавлять новые функции полностью и теперь только исправляют ошибки в LINQ. Во-вторых, это, по-видимому, медленнее, чем прямой SQL, что в определенной степени верно при запуске аппаратного обеспечения более низкого уровня, возможно, я не знаю. В-третьих, это перспектива домена, если вы хотите уклониться от уязвимостей SQL-инъекций, возможно, разумно использовать хранимые процедуры. Во всех случаях для нас мы используем LINQ для моделирования только сейчас, хранимые процедуры "компилируются" на сервере после запуска в первый раз.
Лично я просто отвечаю требованиям, у меня нет полномочий для принятия решения, но LINQ отлично подходит для моделирования и включает в себя множество удобных функций.
Архитектура LINQ хороша, но некоторые могут предпочесть читать исходный код, который не использует синтаксис LINQ SQL. Поэтому, если вы строго придерживаетесь читаемости, вы можете не использовать этот синтаксис.
Я столкнулся с некоторыми проблемами, с которыми мне пришлось работать. Например, в зависимости от того, как устанавливаются отношения с базой данных, вы можете обнаружить, что linq2sql отлично подходит для запросов, но исправляет проблему корректно. Это случилось со мной, и я сделал настройку двух наборов объектов linq. У первого были все отношения, в которых я нуждался, поэтому я мог использовать более простой синтаксис для запросов, но второй не содержал отношения для того, когда я хотел обновить, так как они мне тогда не нужны.
Производительность не должна быть причиной не использовать ее, потому что в целом это только проблема для определенных процессов. И это не так, как вам нужно использовать linq исключительно или вообще не использовать. Я думаю, что многие люди думают: "О, прямой sql быстрее, и есть некоторые вещи, которые мне нужно сделать, чтобы быть быстрыми, поэтому я не могу использовать linq". Это просто глупо. Используйте его там, где можете, и используйте прямой sql, где вы не можете.
Что я могу понять из разных сообщений, так это то, что это зависит от требования
Таким образом, в зависимости от того, требует ли ваш проект встроенные запросы, не столь сложные и включает в себя запросы к источникам данных, кроме реляционных баз данных, таких как SQL, использование LINQ в противном случае для хорошего старого SQL-сервера.....:)
не использовать LINQ, если вы имеете в виду LINQ как "LINQ to SQL", а ваш SQL Server имеет проблемы с производительностью при выполнении Adhoc Query Execution.
Что касается меня - только одна причина не использовать LINQ. Это сторонний инструмент для улучшения этого продукта. Я предпочитаю - Devart LinqConnect, например.
LINQ - отличная технология, но при этом создает нужный код. Если вы думаете, что вы пикассо кода не используете его.
Производить код без LINQ - это создание читаемого кода. Но я всегда пользуюсь;)
Да, безусловно, делает вещи более читабельными и лаконичными. Конечно, в течение 15 лет я использовал его в Visual FoxPro;)