2009-05-02 18 views

Antwort

5
  • kann schwer zu verstehen, wenn Sie zuerst mit ihm
  • Latente Ausführung beginnen können Fehler aus ihren Ursachen (in Bezug auf die Zeit) trennen
  • Out-of-Process LINQ (zB LINQ to SQL) wird immer eine etwas undichte Abstraktion sein - Sie müssen wissen, was funktioniert und was nicht wesentlich

ich noch LINQ lieben massiv aber :)

EDIT ist,: nach dieser kurzen li geschrieben st, erinnerte ich mich, dass ich eine Antwort auf a very similar question haben ...

0

Eigentlich kann ich nicht von irgendwelchen Nachteilen denken. Es macht das Programmieren des Leben viel einfacher, weil eine Menge Dinge kann in einer kompakteren, aber immer noch besser lesbar Art und Weise geschrieben werden.

Aber dies gesagt hat, muß ich auch mit Jon damit einverstanden, dass Sie eine Vorstellung haben sollten, was zu tun mir war (aber das gilt für alle technologischen Fortschritte).

0

der einzige Nachteil, den es hat seine Leistung sieht, ist diese article

+1

Dann hat es keine Nachteile! Der Aufwand, der in diesem Artikel gemessen wird, würde für die große Mehrheit der realen Anwendungen keinen Unterschied machen. –

+1

ich bin jetzt eine app mit linq und leistungsprobleme zu entwickeln stört mich wirklich, speziell wenn Sie so etwas wie dynamische Abfrage verwenden sollten! – Sadegh

1

Wie jede Abstraktion in der Programmierung, ist es anfällig für ein Missverständnis: „Wenn ich diese Abstraktion nur verstehen, ich brauche nicht zu verstehen, was passiert, unter der Decke. "

Die Wahrheit ist, wenn Sie verstehen, was unter den Abdeckungen passiert, erhalten Sie viel mehr Wert aus der Abstraktion, weil Sie verstehen, wo es aufhört anwendbar zu sein, so dass Sie in der Lage sein werden, sich zu bewerben es mit mehr Vertrauen des Erfolgs, wo es angebracht ist.

Dies ist aller Abstraktionen wahr, und gilt in Eimern zu Linq. Um zu verstehen, Linq zu Objekten, das Beste, was zu tun ist, zu lernen, wie Select zu schreiben, Where, Aggregate etc. in C# mit yield return. Und dann herauszufinden, wie yield return viel handgeschriebenen Code ersetzt durch sie alle mit Klassen zu schreiben. Dann werden Sie in der Lage sein, es zu verwenden, um mit einer Aufwertung der Anstrengung, die es Ihnen spart, und es wird nicht mehr wie Magie erscheinen, so dass Sie die Einschränkungen verstehen.

Das Gleiche gilt für die Varianten von Linq, wo die Prädikate erfaßt werden als Ausdruck und in einer anderen Umgebung abtransportiert zu ausgeführt werden. Sie müssen verstehen, wie es funktioniert, um es sicher zu verwenden.

die Nummer 1 Nachteil Linq So ist: die einfachen Beispiele täuschend kurz und einfach aussehen. Das Problem ist, wie weiß der Autor der Probe, was er schreiben soll? Weil sie wussten, wie sie alle aus in der langen Form zu schreiben, und sie wussten, wie Stücke von Linq als Abkürzungen verwendet werden könnten, und so kamen sie in der schönen kurzen Version.

Wie gesagt, nicht wirklich spezifisch für Linq, aber höchst relevant es trotzdem.

3

Der größte Nachteil von LINQ ist, dass es (mit Datenbank-Backends) nicht über eine Repository-Schnittstelle verwendet werden kann, ohne dass es ein leaky abstraction ist.

LINQ ist fantastisch innerhalb eine Schicht (vor allem der DAL usw.), aber da verschiedene Anbieter verschiedene Dinge unterstützen, können Sie nicht auf Expression<Func<...>> oder IQueryable<T> Funktionen arbeiten, um das gleiche für verschiedene Implementierungen verlassen können.

Als Beispiele zwischen LINQ-to-SQL und Entity Framework:

  • EF nicht Single() unterstützt
  • EF Fehler, wenn Sie Skip/Take/First ohne explizite OrderBy
  • EF unterstützt keine UDFs

usw. Der LINQ-Provider für ADO.NET Data Services unterstützt differ nt Kombinationen. Dies macht Spott und andere Abstraktionen unsicher.

Aber: für In-Memory (LINQ-zu-Objekte) oder in einer einzigen Schicht/Implementierung ... fantastisch.

Einige weitere Gedanken hier: Pragmatic LINQ.

1

Anonyme Typen. Korrekter ORM sollte immer Objekte von 'Ihrem' Typ zurückgeben (partielle Klasse, mit der Möglichkeit, meine Methoden hinzuzufügen, zu überschreiben etc.). Es gibt Dutzende von Tutorials und Beispiele für verschiedene komplexe Abfragen, die linq verwenden, aber keiner von ihnen möchte den Vorteil der Rückgabe eines "Tütchens mit Eigenschaften" erklären (return new {.........}). Wie soll ich mit anonymen Typ arbeiten, wickle es wieder in eine andere Klasse?