2008-11-07 2 views
26
  • Каковы преимущества и недостатки LINQ (языковой интеграции)?
  • Каковы наилучшие и худшие случаи использования LINQ?
  • Как вы выиграли или не получили пользу от использования LINQ?
  • Какие источники данных выигрывают от наименьшего и максимального из LINQ?
+0

Кажется хорошим кандидатом на вопрос сообщества Wiki – 2008-11-07 06:42:33

ответ

32

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

Плюсов:

  • декларативный подход делает запросы легче понять и более компактными
  • расширяемость и дерева выражений позволяют в основном последовательное запрашивание нескольких источников
  • Даже в процессе запросы могут быть реализованы другими способами чем LINQ to Objects - например, Параллельный LINQ и моя собственная структура Push LINQ. Очень гибкий.
  • Баснословно полезно в процессе запросов, где это легче понять
  • Великий, чтобы иметь возможность избежать SQL в строках и т.д.
  • Широкий спектр операторов, предоставляемых по умолчанию, и другие могут быть легко добавлены для LINQ к объектам
  • особенности
  • языка введены в первую очередь для LINQ широко применяются в других странах (яй для лямбды)

Минусы:

  • Выражения запроса недостаточно понятны и чрезмерно используются. Часто простой вызов метода короче и проще.
  • Неизбежные несоответствия между поставщиком - несоответствия импеданса по-прежнему присутствует, который является разумным, но нужно понимать
  • Там всегда будут какие-то вещи, которые вы можете сделать в SQL, но не в LINQ
  • Не понимая, что происходит, это легко написать очень неэффективный код
  • Трудно написать поставщика LINQ. Это может быть неизбежно, но больше рекомендаций от Microsoft будет оценено по достоинству.
  • Это новый способ мышления о доступе к данным для большинства разработчиков, и потребуется время для понимания просочиться
  • Не конкретно LINQ но связанные с ним - путь методы расширения обнаруживаются в C# не зернистый достаточно
  • Некоторые операторы «отсутствуют», в частности эквиваленты OrderBy для вещей, отличных от порядка - например найти элемент с максимальным значением свойства
  • Отложенное выполнение и потоковой передачи плохо понимаемой (но улучшение)
  • Отладка может быть очень сложно из-за отсроченного исполнения и потоковое
  • В некоторых конкретных случаях, LINQ может быть значительно медленнее, чем ручной код. Чем лучше вы понимаете внутреннюю работу, тем лучше вы сможете это предсказать.(И, конечно, если производительность важна для вас, у вас должны быть соответствующие тесты.)

Я считаю, что лучше всего иметь дело с запросами в процессе. Их легко предсказать, понять и расширить. Дополнительные технологии, такие как LINQ to XML и Parallel LINQ, великолепны. LINQ to Objects можно использовать практически в любом месте.

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

+0

Дамба много, но мне все еще нравится – 2008-11-07 07:09:15

+12

Они должны переименовать сайт Skeetoverflow IMO. – cfeduke 2008-11-07 07:20:00

+2

@Nathan: Да, список минусов - это сложная задача, но профессионалы гораздо важнее :) Я пропускаю LINQ все время, когда я пишу на Java :( – 2008-11-07 07:30:26

3

Моя любимая часть: использование их для упрощения письменных тестов. Кроме того, IEnumerable-цепочки побудили меня писать более плавные интерфейсы в моем коде.

Против: Lambdas и методы расширения - мои молотки, и все проблемы - это гвозди.

В целом: вдохнула новую жизнь в программирование на C# для меня.

1

Существует проблема с ними из-за кратковременных исключений из блоков catch catch путем задержки выполнения.

, например:

var l = new List<int>() {1, 2, 3}; 
try 
{ 
    l.Select(x => x/0); 
} 
catch 
{ 
    // error 
} 

l.elementAt(0); // exception occurs here outside of the try catch 

который может быть сложен в первый раз, вы столкнетесь с ним, тем более, что отладчик укажет на коде внутри примерки улова.

В противном случае я нахожу их невероятно полезными и очень экономя время.

1

Я использовал LINQ в основном для работы с коллекцией объектов. LINQ отлично работает с коллекциями объектов, в большинстве случаев устраняя необходимость предикатных функций.

Я попытался использовать LINQ to SQL некоторое время назад, но нашел, что он неудобен и неуклюж. В частности, я не мог заставить себя использовать конструктор классов базы данных SQL. Возможно, это дает intellisense в базе данных, но кому это нужно, когда у вас есть SQL?

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

0

Pro:

Con:

  • Как и любая новой технология слишком многие люди не понимают его, но по-прежнему использовать его

тарелочек - @ Джон еще один большой ответ, вы крадете всякий гром: P. Я полностью согласен с тем, насколько сложно писать провайдер, я сейчас в процессе этого! Вы знакомы с Bart De Smet? У него много хороших примеров.

Смежные вопросы