2009-09-01 14 views

Antwort

9

LINQ to Entities erlaubt Ihnen nicht, auf alle Funktionen Ihrer Datenbank zugreifen. In der Lage zu sein, in die Datenbank "hineinzukommen", ist manchmal für fortgeschrittene Abfragen notwendig, entweder um sie von vornherein abzuziehen oder um die manchmal schrecklichen Auswahlen zu verbessern, die das LINQ-zu-Entitäten-System über Ihre Abfrage machen wird.

Das heißt, ich glaube, dass LINQ to Entities sollte das erste Werkzeug für erreichbar. Wenn die Performance ein Problem wird oder Sie etwas Komplexeres haben, würde ich dieses Problemstück in einer gespeicherten Prozedur kapseln und aufrufen. Es gibt keinen Grund dafür, dass Strings heutzutage als Grundlage für Abfragen verwendet werden.

2

ESQL ermöglicht es Ihnen, eine Sortierung auf einer where-Klausel zu wählen, etwas, das nicht in LINQ-to-Anything unterstützt wird. Dies kann wirklich nützlich sein. Mit ESQL können Sie auch den genauen Typ angeben, der zurückgegeben werden soll, wenn Typen voneinander erben (im Gegensatz zu LINQs OfType, die Instanzen eines bestimmten Typs und eines Untertyps zurückgibt). Darüber hinaus kann ich mir keinen guten Grund vorstellen, es zu benutzen. Manchmal ist es schön, Abfragen in Strings erstellen zu können, aber DynamicQuery/Dynamic LINQ ist in den seltenen Fällen, in denen dies erforderlich ist, im Allgemeinen gut genug.

Ich denke, (vielleicht zynisch), dass der „echte“ Zweck der ESQL ist „es LINQ früher.“

Zu Punkt Godeke des nicht optimalen Abfragen der Befestigung, habe ich noch einen sehen ich nicht durch eine Änderung der LINQ Ausdruck beheben könnte. Sowohl ESQL als auch L2E enden als CCTs, sodass die SQL-Generierungspipeline gleich ist.

+0

Mein Punkt über suboptimale Abfragen ist, dass ich Dinge in TSQL tun kann, die ich nicht in LINQ to Entities kann. Machen Sie eine Tour auf Google mit "parameter sniffing entities" für einige Beispiele (oder, wenn Sie den Fix haben, lassen Sie es mich wissen und helfen Sie allen anderen in Not!) Die allgemeine Problemumgehung, die ich als zuverlässig gefunden habe, ist die Verwendung von T-SQL um die Schnüffelfehler zu vermeiden. – Godeke

+0

T-SQL, ja. ESQL, in den meisten Fällen nicht. Die Frage war LINQ vs. * E * SQL, nicht * T * -SQL. –

+0

erklären die Akronyme pls – alchemical

Verwandte Themen