2014-12-01 24 views
7

LINQ to SQL, değerleri daima çıktıdaki sorgu parametrelerine dönüştürür. Örneğin:Oluşturulan sorgu için LINQ SQL için const inlining zorlamak için bir yolu var mı?

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

üretir: Bu belli sorgu optimizasyonu senaryolarına sorunlara neden olmaktadır

WHERE Field = @p0 

. Oluşturulan SQL'de satırlara gömülecek değerleri zorlamak için bir yol var mı? Böylece, bu:

WHERE Field = 5 

? LINQ'un varlıkları bir yol sağlar mı yoksa aynı davranır mı?

+0

Bu "senaryolar" nedir? – ErikEJ

+1

@ErikEJ, LINQ to SQL tarafından oluşturulan sorgularımdan birinde, parametre kullanılarak satır içi değerlerden 10 kat daha yavaşdır. Bu, sorgu iyileştiricilerinin nasıl çalıştığıyla ilgili mantıklıdır. Sorgumun kendisini optimize etmeyi değil, hiç bir amaca hizmet etmeyen "gereksiz parametre" sorununu çözmeye çalışıyorum. –

+1

[Bu soru] (http://stackoverflow.com/q/510214/861716) bazı arka plan bilgileri verir. –

cevap

1

Diego Vega from Entity Framework team mentioned on Twitter gibi:

sabitleri aslında sonsuza EF satır içi sabitleri olarak çevirdik. EF tek bir yakalama ile, gitmek yoludur gibi

öyle görünüyor:

Bunun çok

için kötü olduğunda EF7 duymak gerekir daha çok parameterize gerektiğine inanıyoruz

en azından EF6, bu şekilde SQL'den LINQ'a göre çok daha iyidir, böylece EF'yi kullanabiliriz.

İlgili konular