【问题标题】:LINQ SQL Statement is returning wrong resultsLINQ SQL 语句返回错误的结果
【发布时间】:2011-04-04 20:37:21
【问题描述】:

我有一个 afaik 正确的 SQL 语句,但来自 SQL 服务器的响应不正确。我已经调试过这个问题,发现如果我在没有包装存储过程的情况下执行 SQL 语句,我会得到不同的结果。我所做的只是用实际值替换变量

Linq 生成代码:

exec sp_executesql N'SELECT [t0].[RoomId], [t0].[Title], [t0].[Detail], [t0].[ThumbnailPath], [t0].[PageId], [t0].[TypeId], [t0].[LocationId], [t0].[TimeStamp], [t0].[DeleteStamp]
FROM [dbo].[Room] AS [t0]
INNER JOIN [dbo].[RoomType] AS [t1] ON [t1].[RoomTypeId] = [t0].[TypeId]
WHERE ([t1].[Sleeps] >= @p0) AND ([t0].[DeleteStamp] IS NULL) AND (((
    SELECT COUNT(*)
    FROM [dbo].[Booking] AS [t2]
    INNER JOIN [dbo].[Order] AS [t3] ON [t3].[OrderId] = [t2].[OrderId]
    WHERE ([t2].[StartStamp] <= @p1) 
    AND ([t2].[EndStamp] >= @p2) 
    AND (([t3].[Status] = @p3) 
        OR ([t3].[Status] = @p4) 
        OR (([t3].[Status] = @p5) AND ([t3].[CreatedStamp] > @p6))) 
        AND ([t2].[RoomId] = [t0].[RoomId])
    )) = @p7)


    ',N'@p0 int,@p1 datetime,@p2 datetime,@p3 int,@p4 int,@p5 int,@p6 datetime,@p7 int',
    @p0=1,@p1='2011-04-05 00:00:00',@p2='2011-04-04 00:00:00',@p3=3,@p4=5,@p5=0,@p6='2011-04-04 12:36:09.490',@p7=0

没有 SP

SELECT [t0].[RoomId], [t0].[Title], [t0].[Detail], [t0].[ThumbnailPath], [t0].[PageId], [t0].[TypeId], [t0].[LocationId], [t0].[TimeStamp], [t0].[DeleteStamp]
FROM [dbo].[Room] AS [t0]
INNER JOIN [dbo].[RoomType] AS [t1] ON [t1].[RoomTypeId] = [t0].[TypeId]
WHERE ([t1].[Sleeps] >= 1) AND ([t0].[DeleteStamp] IS NULL) AND (((
    SELECT COUNT(*)
    FROM [dbo].[Booking] AS [t2]
    INNER JOIN [dbo].[Order] AS [t3] ON [t3].[OrderId] = [t2].[OrderId]
    WHERE ([t2].[StartStamp] <= '2011-04-05 00:00:00') 
    AND ([t2].[EndStamp] >= '2011-04-04 00:00:00') 
    AND (([t3].[Status] = 3) 
        OR ([t3].[Status] = 4) 
        OR (([t3].[Status] = 5) AND ([t3].[CreatedStamp] > '2011-04-04 12:36:09.490'))) 
        AND ([t2].[RoomId] = [t0].[RoomId])
    )) = 0)

第一个结果集返回 1 行,而第二个结果集返回 21!!

谁能看出它让我发疯的区别。

【问题讨论】:

  • 为什么要处理从 LINQ 查询生成的 SQL 代码?向我们展示 LINQ 查询,也许我们可以在其中找到错误。
  • 因为我是从底层而不是顶层开始

标签: c# sql-server linq


【解决方案1】:

替换变量时出错!
当您应该将 p4 替换为 5 并将 p5 替换为 5 而不是 0 时,您将 p4 替换为 4。

【讨论】:

    【解决方案2】:

    嗯,一个区别是@p5=0,而另一个区别是[t3].[Status] = 5

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-05
      • 2014-08-17
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      相关资源
      最近更新 更多