gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:53:41 25 4
gpt4 key购买 nike

我已经看到几个关于此的 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();

更干净、简洁,它应该可以工作。

关于c# - 为什么 Linq 忽略我的 where 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24332149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com