2014-06-20 13 views
5

Ich sehe bereits mehrere StackOverflow-Fragen dazu, aber nicht alle scheinen zu meinem Szenario zu passen. Ich verspreche, ich schaute.Warum ignoriert Linq meine Where-Klausel?

Ich habe einige Abfragen gegen meine Datenbank, die ich mit linq tun, und ich kann nicht herausfinden, warum die falsche SQL generiert wird. Dies geschieht an mehreren Stellen in meinem Code. Ich hoffe, dass wir uns in ein bekanntes Problem hineinversetzen, aber ich kann mich nicht damit herumschlagen, warum Linq scheinbar entscheidet, dass meine Where-Klausel dumm ist, und sie nicht zur generierten SQL-Abfrage hinzufügen sollte.

Warum ist das?

Beispiel:

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

Die obige Abfrage gibt die folgenden 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]} 

jedoch die folgende Abfrage:

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

Generiert die folgende richtige 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] 
WHERE [Extent1].[RecordId] = '78e49f5c-0ff8-e311-93f4-00155d514a6d'} 
+7

Was sind die Datentypen von 'Param1' und' GuidParam'? Ist es jemals so, dass LINQ entscheiden könnte, dass die WHERE-Klausel immer wahr ist? –

+0

Es ist ein eindeutiger uniqueIdentifier. –

+0

Ich fragte nach zwei Dingen, Sie haben über einen von ihnen geantwortet. –

Antwort

-2

Ich ziehe die Lambda-Notation, und ich sehe nicht, warum dies nicht funktionieren würde ...

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

Reiniger, prägnant und es sollte funktionieren.

+1

Es sollte genau so sein, weil der OP-Code vom Compiler genau in diesen umgewandelt wird. – Servy

+0

und funktioniert es? – mgrenier

+1

Wenn der OP-Code nicht funktioniert, wird dies nicht funktionieren. Wenn dies funktioniert, funktioniert der OP-Code. Wie auch immer, Sie haben sein Problem nicht gelöst. – Servy

Verwandte Themen