2014-06-20 25 views
5

Bu konuda birkaç StackOverflow ile ilgili sorularım var ama benim senaryolarıma uymuyor gibi görünüyor. Söz veriyorum baktım.Neden Linq, nerede kullandığımı yok sayar?

Benim veritabanına karşı linq kullanıyorum bazı sorgular var ve yanlış SQL neden oluşturulduğunu anlayamıyorum. Bu, kodumun çeşitli yerlerinde oluyor. Umuyorum ki, sadece bazı iyi bilinen tuhaflıklara düşüyoruz ama kafamın etrafına neden sarılmıyorum ki Linq görünüşe göre nerede yanıltıcıdır ve üretilen SQL sorgusuna eklememelidir.

Bu neden?

Örnek:

var testing = (from i in context.TableName1 where i.Param1 == object1.GuidParam select i).ToList(); 

Yukarıdaki sorgu aşağıdaki SQL aşağıdaki sorgu Ancak

{SELECT 
    [Extent1].[RecordId] AS [RecordId], 
    [Extent1].[AnotherId] AS [AnotherId], 
    [Extent1].[YetAnotherId] AS [YetAnotherId], 
    [Extent1].[WeLikeIds] AS [WeLikeIds], 
    [Extent1].[WeReallyLikeIds] AS [WeReallyLikeIds] 
    FROM [dbo].[SomeTable] AS [Extent1]} 

verir:

var testing = (from i in context.TableName1 where i.Param1 == object1.GuidParam select i); 
var testingToList = testing.ToList(); 

aşağıdaki doğru SQL üretir

{SELECT 
    [Extent1].[RecordId] AS [RecordId], 
    [Extent1].[AnotherId] AS [AnotherId], 
    [Extent1].[YetAnotherId] AS [YetAnotherId], 
    [Extent1].[WeLikeIds] AS [WeLikeIds], 
    [Extent1].[WeReallyLikeIds] AS [WeReallyLikeIds] 
    FROM [dbo].[SomeTable] AS [Extent1] 
WHERE [Extent1].[RecordId] = '78e49f5c-0ff8-e311-93f4-00155d514a6d'} 
+7

Param1 ve GuidParam'ın veri türleri nelerdir? LINQ'in, nerede yer alan maddenin her zaman doğru olduğuna karar verebilmesi her zaman böyle midir? –

+0

NULL olamayan benzersiz bir tanımlayıcı. –

+0

İki şey hakkında sordum, bunlardan biri hakkında cevap verdin. –

cevap

-2

Ben lambda gösterimini tercih ve bu işe yaramaz neden görmüyorum ... özlü

var testing = context.TableName1.Where(i => i.Param1 == object1.GuidParam).ToList(); 

Cleaner, ve çalışması gerekir.

+1

Tam olarak aynı olmalıdır, çünkü OP'nin kodu derleyici tarafından tam olarak buna dönüştürülür. – Servy

+0

ve işe yarıyor mu? – mgrenier

+1

OP'nin kodu işe yaramazsa, bu işe yaramaz. Bu işe yararsa, OP'nin kodu çalışır. Her iki durumda da problemini çözmedin. – Servy

İlgili konular