2009-09-01 14 views

risposta

9

LINQ to Entities non consente l'accesso a tutte le funzionalità del database. Essere in grado di "raggiungere" il database è talvolta necessario per le query avanzate, sia per rimuoverle, sia per migliorare le scelte a volte orribili che il sistema LINQ to Entities comporterà riguardo alla query.

Detto questo, credo che LINQ alle Entità dovrebbe essere il primo strumento a cui si può arrivare. Se la prestazione diventa un problema, o se hai qualcosa di più complesso, allora incapsulerei quel pezzo di problema in una stored procedure e lo chiamerei. Al giorno d'oggi non c'è motivo per cui le stringhe vengano utilizzate come base per le query.

2

ESQL consente di scegliere una collation su una clausola where, che non è supportata in LINQ-to-Anything. Questo può essere veramente utile. ESQL consente inoltre di specificare il tipo preciso che si desidera restituire quando i tipi si ereditano l'uno dall'altro (al contrario di LINQ OfType, che restituisce le istanze di un certo tipo e qualsiasi sottotipo). Oltre a ciò, non riesco a pensare ad un buon motivo per usarlo. Di tanto in tanto è utile poter creare query nelle stringhe, ma DynamicQuery/Dynamic LINQ è generalmente abbastanza buono nei casi molto rari in cui ciò è necessario.

Penso (forse cinicamente) che lo scopo "reale" di ESQL è "è precedente a LINQ".

Per quanto riguarda il punto di Godeke di fissare query non ottimali, devo ancora vedere uno che non ho potuto correggere cambiando l'espressione LINQ. Sia ESQL che L2E finiscono come CCT, quindi la pipeline di generazione SQL è la stessa.

+0

Il mio punto sulle query non ottimali è che posso fare cose in TSQL che non posso in LINQ alle entità. Fai un giro su Google con "parametri sniffing entities" per alcuni esempi (o, se hai la soluzione, per favore fammi sapere e aiuta tutti gli altri che ne hanno bisogno!) La soluzione generale che ho trovato affidabile è usare T-SQL per evitare gli errori di sniffing. – Godeke

+0

T-SQL, sì. ESQL, no, per la maggior parte. La domanda era LINQ vs * E * SQL, non * T * -SQL. –

+0

spiega gli acronimi pls – alchemical

Problemi correlati