C# 为什么Linq忽略我的where子句?

C# 为什么Linq忽略我的where子句?,c#,sql,linq,azure-sql-database,generated-sql,C#,Sql,Linq,Azure Sql Database,Generated Sql,我已经在这方面看到了几个StackOverflow问题,但似乎没有一个与我的情况相符。我保证我看过了 我使用linq对我的数据库进行了一些查询,但我无法找出生成错误SQL的原因。这在我的代码中的几个地方都发生过。我希望我们只是陷入了一些众所周知的陷阱,但我无法理解为什么Linq似乎认为我的where子句是哑的,不应该将其添加到生成的SQL查询中 为什么会这样 例如: var testing = (from i in context.TableName1 where i.Param1 == obj

我已经在这方面看到了几个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();

更清晰、简洁,而且应该可以使用。

什么是
Param1
GuidParam
的数据类型?LINQ是否曾经决定where子句始终为真?它是一个可为空的唯一标识符。我问了两件事,你回答了其中一件事。Param1在数据库中可为空吗?我很难相信你描述的行为。您可以分享关于如何测试这些以及如何捕获SQL的详细信息吗?您提供的代码是代表实际代码和实际结果,还是作为您在实际代码中看到的各种模式的示例编写的?它应该完全相同,因为编译器将OP的代码转换为完全相同的模式。如果OP的代码不起作用,那么这就不起作用。如果这能起作用,那么OP的代码就会起作用。不管怎样,你都没有解决他的问题。这很有趣,因为我现在读了所有的评论,我看到有人建议使用lambda符号,OP说它有效,可能会成为他的解决方案。听起来就像是重新编译代码解决了问题,因为这个更改不是功能性更改。当他改变解决方案时,这个问题与其他没有显示的东西有关,这些东西也改变了。正如另一位评论员所提到的,他也可能不恰当地观察到了正在发生的事情。没有OP,我们就没有信息来真正找出问题所在。不过,这种改变并不能解决这个问题。