Каков самый трудный или самый недооцененный аспект LINQ? [закрытый]

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

Абстрактные классы - это ярлыки. Есть ли вещи, которые делят все производные от PetBase, которые вы можете кодировать один раз и делать? Если да, то пришло время для абстрактного класса.

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

Абстрактные классы могут содержать несколько интерфейсов. Ваш абстрактный класс PetBase может реализовать IPet (владельцы домашних животных имеют владельца) и IDigestion (домашние животные едят или, по крайней мере, должны). Тем не менее, PetBase, вероятно, не будет внедрять IMammal, поскольку не все животные являются млекопитающими, и не все млекопитающие являются домашними животными. Вы можете добавить MammalPetBase, который расширяет PetBase и добавляет IMammal. FishBase может иметь PetBase и добавлять IFish. Исиш будет иметь ISwim и IUnderwaterBreather в качестве интерфейсов.

Да, мой пример сильно сложный для простого примера, но это часть замечательной вещи о том, как интерфейсы и абстрактные классы работают вместе.

282
задан 5 revs, 4 users 65% 27 June 2009 в 02:50
поделиться

35 ответов

Задержанное выполнение

271
ответ дан JaredPar 23 November 2019 в 01:54
поделиться

Ленивая Загрузка.

2
ответ дан Ryan Eastabrook 23 November 2019 в 01:54
поделиться

Как упомянуто, ленивая загрузка и задержанное выполнение

, Как LINQ к Объектам и LINQ к XML (IEnumerable) отличаются от LINQ до SQL (IQueryable)

КАК для создания Уровня доступа к данным, Бизнес-Слоя и Уровня представления с LINQ во всех слоях.... и хорошем примере.

2
ответ дан Ash Machine 23 November 2019 в 01:54
поделиться

Я довольно плохо знаком с LINQ. Вот вещи, которые я споткнулся в своей первой попытке

  • Объединение нескольких запросов в один
  • Эффективно отладка запросы LINQ в Visual Studio.
20
ответ дан Mark Heath 23 November 2019 в 01:54
поделиться

, Что представляет var, когда запрос выполняется?

он iQueryable, iSingleResult, iMultipleResult, или делает это изменяется на основе реализация. Существует некоторое предположение об использовании (что, кажется), динамический контроль типов по сравнению со стандартным статическим контролем типов в C#.

5
ответ дан 2 revs, 2 users 80% 23 November 2019 в 01:54
поделиться

Я думаю то, что Lambda выражение может разрешить и дерево выражений и анонимный делегат, таким образом, можно передать то же описание lambda выражение и к IEnumerable<T> дополнительные методы и к IQueryable<T> дополнительные методы.

55
ответ дан 2 revs, 2 users 67% 23 November 2019 в 01:54
поделиться

В LINQ к SQL я постоянно вижу людей, не понимающих DataContext, как это может использоваться и как это должно использоваться. Слишком много людей не видят DataContext для того, каково это, объект Единицы работы, не персистентный объект.

я видел много времен, где люди пробуют к одиночному элементу сессию DataContext/это / и т.д. вместо того, чтобы делать новое время для каждой операции.

И затем там избавляется от DataContext, прежде чем IQueryable был оценен, но это - больше продвижения с людьми, не понимающими IQueryable, чем DataContext.

другое понятие я вижу, что много беспорядка с является Синтаксисом Запроса по сравнению с Синтаксисом выражения. Я буду использовать, который когда-либо является самым легким в той точке, часто придерживающейся Синтаксиса выражения. Много людей все еще не понимает, что они произведут то же самое в конце, Запрос компилируется в Выражение, в конце концов.

40
ответ дан Aaron Powell 23 November 2019 в 01:54
поделиться

Что-то, что я первоначально не понял, было то, что синтаксис LINQ не делает , требуют IEnumerable<T> или IQueryable<T> работать, LINQ является примерно сопоставлением с образцом.

сопроводительный текст http://bartdesmet.info/images_wlw/QIsIQueryabletheRightChoiceforMe_13478/image_thumb_3.png

Вот является ответом (не, я не сделал запись, которые ведут блог, Bart, которого Де-Смет сделал, и он - один из лучших блоггеров на LINQ, который я нашел).

20
ответ дан Aaron Powell 23 November 2019 в 01:54
поделиться

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

26
ответ дан Robert Rossney 23 November 2019 в 01:54
поделиться

Я все еще испытываю затруднения из-за команды, которой "позволяют" (который я никогда не находил использованием для), и SelectMany (который я использовал, но я не уверен, что сделал его правильно)

19
ответ дан James Curran 23 November 2019 в 01:54
поделиться

Понимание, когда абстракция среди утечек поставщиков Linq. Некоторые вещи работают над объектами, но не SQL (например.TakeWhile). Некоторые методы могут быть переведены в SQL (ToUpper), в то время как другие не могут. Некоторые методы более эффективны в объектах, где другие являются более эффективными при SQL (различные методы соединения).

19
ответ дан denis phillips 23 November 2019 в 01:54
поделиться

Несколько вещей.

  1. Люди размышление о Linq как Linq к SQL.
  2. Некоторые люди думают, что они могут начать заменять весь foreach/logic запросами Linq, не считая эту производительность последствиями.
12
ответ дан Krishna Kumar 23 November 2019 в 01:54
поделиться

Хорошо, должный потребовать, я описал часть материала Выражения. Я не на 100% доволен тем, как блоггер и LiveWriter тайно замыслили форматировать его, но это сделает на данный момент...

Так или иначе, здесь идет... Я любил бы любую обратную связь, особенно если существуют области, где люди хотят больше информации.

Здесь это , как он, или ненавидьте его...

11
ответ дан Marc Gravell 23 November 2019 в 01:54
поделиться

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

9
ответ дан Steve 23 November 2019 в 01:54
поделиться

Я не знаю, квалифицирует ли это, как неправильно понято - но для меня, просто неизвестный.

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

Посмотрите здесь для большего количества информации: MSDN: DataLoadOptions

6
ответ дан Martin 23 November 2019 в 01:54
поделиться

Я сказал бы, что самое недооцененное (или который должен быть не понят?) аспект LINQ IQueryable и пользовательские поставщики LINQ .

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

, Но когда я начал смотреть на и читать о IQueryable, и Выражениях и пользовательских linq поставщиках, он заставил мою голову кружиться. Смотрите на то, как LINQ к SQL работает, если Вы хотите видеть некоторую довольно сложную логику.

я надеюсь понять тот аспект LINQ...

6
ответ дан Jack Ukleja 23 November 2019 в 01:54
поделиться

То, что существуют больше, чем всего LINQ к SQL, и функциями являются больше, чем просто SQL синтаксический анализатор, встроенный в язык.

104
ответ дан 2 revs, 2 users 67% 23 November 2019 в 01:54
поделиться

Как сказал большинство людей, я думаю, что наиболее неправильно понятая часть предполагает, что LINQ является просто заменой T-SQL. Мой менеджер, который считает себя гуру TSQL, не позволил бы нам использовать LINQ в нашем проекте и даже ненавидит MS за выпуск подобной вещи !!!

6
ответ дан 2 revs 23 November 2019 в 01:54
поделиться

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

LINQ намного больше, чем LINQ to SQL .

Теперь, когда большинство из нас использовали LINQ в коллекции, мы НИКОГДА не вернемся!

LINQ - единственная наиболее значимая особенность .NET со времен Generics в 2.0 и Anonymous Types в 3.0.

И теперь, когда у нас есть Lambda, я не могу ждать для параллельного программирования!

34
ответ дан 23 November 2019 в 01:54
поделиться

Я знаю, что концепция отложенного выполнения уже должна быть в моей голове, но этот пример действительно помог мне понять ее на практике:

static void Linq_Deferred_Execution_Demo()
{
    List<String> items = new List<string> { "Bob", "Alice", "Trent" };

    var results = from s in items select s;

    Console.WriteLine("Before add:");
    foreach (var result in results)
    {
        Console.WriteLine(result);
    }

    items.Add("Mallory");

    //
    //  Enumerating the results again will return the new item, even
    //  though we did not re-assign the Linq expression to it!
    //

    Console.WriteLine("\nAfter add:");
    foreach (var result in results)
    {
        Console.WriteLine(result);
    }
}

Приведенный выше код возвращает следующее:

Before add:
Bob
Alice
Trent

After add:
Bob
Alice
Trent
Mallory
125
ответ дан 23 November 2019 в 01:54
поделиться

Нотация Big O . LINQ позволяет невероятно легко писать алгоритмы O (n ^ 4), даже не осознавая этого, если вы не знаете, что делаете.

86
ответ дан 23 November 2019 в 01:54
поделиться

Некоторые сообщения об ошибках, особенно от LINQ to SQL, могут сбивать с толку. ухмылка

Меня, как и всех, пару раз укусила отложенная казнь. Я думаю, что больше всего меня сбивало с толку поставщик запросов SQL Server и то, что вы можете и не можете с ним делать.

Я все еще поражен тем фактом, что вы не можете использовать Sum () для десятичных чисел Столбец / money иногда бывает пустым. Использование DefaultIfEmpty () просто не сработает. : (

10
ответ дан 23 November 2019 в 01:54
поделиться

Скомпилированные запросы

Тот факт, что вы не можете связать IQueryable , потому что они являются вызовами методов (в то время как по-прежнему не что иное, как переводимый SQL! ) и то, что это практически невозможно обойти, ошеломляет и создает огромное нарушение DRY. Мне нужны мои IQueryable для ad-hoc, в которых у меня нет скомпилированных запросов (я скомпилировал запросы только для тяжелых сценариев), но в скомпилированных запросах я не могу их использовать и вместо этого мне нужен чтобы снова написать обычный синтаксис запроса. Теперь я делаю те же подзапросы в двух местах, нужно не забывать обновлять оба, если что-то изменится, и так далее. Кошмар.

4
ответ дан 23 November 2019 в 01:54
поделиться

Слишком долго я путь не осознавал, что многие методы расширения LINQ, такие как Single () , SingleOrDefault () и т. Д. есть перегрузки, которые принимают лямбды.

Вы можете:

Single(x => x.id == id)

и не нужно этого говорить - что из-за плохого руководства заставило меня делать

Where(x => x.id == id).Single()
53
ответ дан 23 November 2019 в 01:54
поделиться

Как легко вложить цикл - это то, что, я думаю, не все понимают.

Например:

from outerloopitem in outerloopitems
from innerloopitem in outerloopitem.childitems
select outerloopitem, innerloopitem
5
ответ дан 23 November 2019 в 01:54
поделиться

Как говорит большинство людей, я думаю, что наиболее неправильно понимаемая часть - это предположение, что LINQ - это просто замена T-SQL. Мой менеджер, считающий себя гуру TSQL, не позволил нам использовать LINQ в нашем проекте и даже ненавидит MS за то, что выпустила такую ​​штуку !!!

2
ответ дан 23 November 2019 в 01:54
поделиться

Я думаю, что необходимо уделить больше внимания обычно использованным функциям LINQ подробно - Лямбда-выражения и Анонимные типы, вместо того, чтобы напрасно тратить время на "трудно для понимания" материала, который редко используется в программах реального мира.

1
ответ дан user21582 23 November 2019 в 01:54
поделиться

, Который является более быстрым, встроенным Linq-to-Sql или Linq-to-Sql с помощью Tsql Sprocs

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

1
ответ дан 2 revs 23 November 2019 в 01:54
поделиться

Я нахожу его немного неутешительным, что синтаксис выражения запроса только поддерживает подмножество функциональности LINQ, таким образом, Вы не можете постараться не объединять дополнительные методы в цепочку время от времени. Например, Distinct метод нельзя назвать с помощью синтаксиса выражения запроса. Для использования Distinct метод, необходимо назвать дополнительный метод. С другой стороны, синтаксис выражения запроса очень удобен во многих случаях, таким образом, Вы не хотите пропускать это также.

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

1
ответ дан Brian Rasmussen 23 November 2019 в 01:54
поделиться
Другие вопросы по тегам:

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