2014-06-20 13 views
5

Vedo diverse domande StackOverflow su questo già, ma non sembrano corrispondere al mio scenario. Prometto che ho guardato.Perché Linq ignora la mia clausola where?

Ho alcune query sul mio database che sto usando linq per fare e non riesco a capire perché viene generato il codice SQL errato. Questo sta accadendo in diversi punti del mio codice. Spero che ci stiamo solo imbattendo in qualche ben noto trucchetto, ma non riesco a capire perché Linq decida apparentemente la mia clausola where è stupida e non dovrebbe aggiungerla alla query SQL generata.

Perché è questo?

Esempio:

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

La query precedente restituisce il seguente SQL

{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]} 

Tuttavia la seguente query:

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

genera il seguente SQL corretta

{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

Quali sono i tipi di dati di 'Param1' e' GuidParam'? E 'mai il caso che LINQ possa decidere che la clausola where è sempre vera? –

+0

È un identificatore univoco univoco. –

+0

Ho chiesto due cose, hai risposto a una di esse. –

risposta

-2

preferisco la notazione lambda, e non vedo perché questo non avrebbe funzionato ...

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

Cleaner, conciso e dovrebbe funzionare.

+1

Dovrebbe essere esattamente lo stesso, perché il codice dell'OP viene trasformato dal compilatore esattamente in questo. – Servy

+0

e funziona? – mgrenier

+1

Se il codice dell'OP non funzionerà, non funzionerà. Se ciò dovesse funzionare, il codice dell'OP funzionerà. Ad ogni modo, non hai risolto il suo problema. – Servy

Problemi correlati