2014-12-01 7 views
7

LINQ to SQL converte sempre i valori in parametri di query nell'output. Per esempio:Esiste un modo per forzare l'inlining di const per la query generata in LINQ su SQL?

someTable.Where(n => n.Field == 5); 

produce:

WHERE Field = @p0 

Questo provoca problemi su alcuni scenari di ottimizzazione delle query. C'è un modo per forzare i valori in linea nell'SQL generato, in modo che diventi:

WHERE Field = 5 

? LINQ alle entità fornirebbe un modo o si comporterebbe allo stesso modo?

+0

Quali sono questi "scenari"? – ErikEJ

+1

@ErikEJ in una delle mie query generate da LINQ a SQL, utilizzando il parametro è 10 volte più lento rispetto ai valori incorporati. ha senso a causa di come funzionano gli ottimizzatori di query. Non sto cercando di ottimizzare la mia stessa query, ma cercando di affrontare il problema più ampio di "parametrizzazione non necessaria" che non serve affatto. –

+1

[Questa domanda] (http://stackoverflow.com/q/510214/861716) fornisce alcune informazioni di base. –

risposta

1

Come Diego Vega from Entity Framework team mentioned on Twitter:

costanti hanno effettivamente tradotto come costanti in linea di EF per sempre.

così sembra che EF è la strada da percorrere, con un problema:

Crediamo EF7 dovrebbe parametrizzare maggior ragione abbiamo bisogno di sentire quando che è un male per te

almeno EF6 è molto meglio di LINQ a SQL in questo modo, quindi possiamo usare EF.

Problemi correlati