2014-06-20 50 views
5

我看到了幾個StackOverflow問題,但這些問題似乎與我的情況相符。我保證我看了。爲什麼Linq會忽略我的where子句?

我對我的數據庫有一些查詢,我正在使用linq來做,我無法弄清楚爲什麼不正確的SQL正在生成。這發生在我的代碼中的幾個地方。我希望我們只是陷入一些衆所周知的疑難雜症,但我無法繞過我的頭,因爲Linq似乎決定我的where子句是愚蠢的,不應該將它添加到生成的SQL查詢中。

這是爲什麼?

實施例:

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

上述查詢返回以下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]} 

然而以下查詢:

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

生成以下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

「Param1」和「GuidParam」的數據類型是什麼? LINQ是否可以決定where子句總是正確的? –

+0

這是一個可空的uniqueIdentifier。 –

+0

我問了兩件事,你回答了其中的一件。 –

回答

-2

我喜歡拉姆達符號,我不明白爲什麼這是行不通的......

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

清潔,簡潔,它應該工作。

+1

它應該完全一樣,因爲OP的代碼由編譯器轉換爲這個。 – Servy

+0

並且它工作? – mgrenier

+1

如果OP的代碼不起作用,那麼這將不起作用。如果這可行,那麼OP的代碼將起作用。無論如何,你還沒有解決他的問題。 – Servy