簡體   English   中英

Linq為什么忽略我的where子句?

[英]Why does Linq ignore my where clause?

我已經看到了幾個StackOverflow問題,但它們似乎與我的情況不符。 我保證我看了。

我對我的數據庫有一些查詢,我正在使用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'}

我更喜歡lambda表示法,我不明白為什么這不起作用......

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM