Linq 的奇怪行为

Posted

技术标签:

【中文标题】Linq 的奇怪行为【英文标题】:Weird behaviour with Linq 【发布时间】:2011-11-11 10:52:35 【问题描述】:

我有一个使用 Sql Server CE 3.5 数据库运行的 Windows 窗体应用程序 (.NET 4.0),我通过 EF 连接访问该数据库。

这是我的初始查询,它返回两个结果:

var list = db.UserPresentation
                         .Select(up => new
                         
                             UserPresentationID = up.UserPresentationID,
                             PresentationName = up.PresentationName,
                             DateRequested = up.DateRequested,
                             Edit = string.Empty,
                             Delete = string.Empty,
                             Download = string.Empty
                         )
                         .OrderByDescending(up => up.DateRequested)
                         .ToList();

现在我引入一个外部变量和一个 where 子句,它返回零结果。如果我在 LinqPad 中运行相同的代码,它会返回 2 个结果。

 int userID = 2;

            // load list of user presentations
            var list = db.UserPresentation
                         .Where(up => up.UserID == userID)
                         .Select(up => new
                         
                             UserPresentationID = up.UserPresentationID,
                             PresentationName = up.PresentationName,
                             DateRequested = up.DateRequested,
                             Edit = string.Empty,
                             Delete = string.Empty,
                             Download = string.Empty
                         )
                         .OrderByDescending(up => up.DateRequested)
                         .ToList();

现在我在查询中硬编码用户 ID,它再次返回两个结果:

var list = db.UserPresentation
                         .Where(up => up.UserID == 2)
                         .Select(up => new
                         
                             UserPresentationID = up.UserPresentationID,
                             PresentationName = up.PresentationName,
                             DateRequested = up.DateRequested,
                             Edit = string.Empty,
                             Delete = string.Empty,
                             Download = string.Empty
                         )
                         .OrderByDescending(up => up.DateRequested)
                         .ToList();

我真的很难过。知道这里发生了什么吗?

【问题讨论】:

您实际上并没有告诉我们问题是什么(我可以看到)。是返回你想要的两个结果吗? 查询应该返回两个结果,是的。但更广泛的问题是,如果我在 where 子句中使用变量而不是硬编码值,为什么查询不起作用?? 它没有理由不工作。也许您还有另一个 userId 变量,其大小写不同。 @draconis 你可能需要做一些实验。我同意 leppie 的观点,即问题一定出在我们看不到的东西上。 另外,说到名字的大小写:***.com/questions/264823/… 【参考方案1】:

UserID 可以为空吗?

如果是这样,请务必这样做.Where(up => up.UserID.HasValue && up.UserID.Value == userID)

我曾经有过类似的可空日期时间

【讨论】:

【参考方案2】:

您是否尝试过在变量中分配相同的硬编码值?我的猜测是在你的数据中没有找到你变量中的值,也就是说,如果你确定变量名是正确的。

【讨论】:

以上是关于Linq 的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

使用 var、动态和 linq 组合的奇怪行为变化

LINQ except() 的意外行为

Linq 在哪里有奇怪的情况

使用 LINQ to SQL 的奇怪排序问题

LINQ 查询结果中的奇怪值

Visual Studio for Mac 上的奇怪 linq 异常