Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq的怪异行为_Linq_Entity Framework 4_Sql Server Ce - Fatal编程技术网

Linq的怪异行为

Linq的怪异行为,linq,entity-framework-4,sql-server-ce,Linq,Entity Framework 4,Sql Server Ce,我有一个Windows窗体应用程序(.NET 4.0)与Sql Server CE 3.5数据库一起运行,我通过EF连接访问该数据库 这是我的初始查询,它返回两个结果: var list = db.UserPresentation .Select(up => new { UserPresentationID = up.UserPres

我有一个Windows窗体应用程序(.NET 4.0)与Sql Server CE 3.5数据库一起运行,我通过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();
现在我在查询中硬编码userid,它再次返回两个结果:

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();

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

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

UserID可以为空吗

如果是这样,请确保执行
.Where(up=>up.UserID.HasValue&&up.UserID.Value==UserID)


有一次,我遇到了一个类似于可为空的datetime的问题

你还没有告诉我们问题出在哪里(我看得出来)。返回这两个结果是您想要的吗?查询应该返回两个结果,是的。但更广泛的问题是,如果在where子句中使用变量而不是硬编码的值,为什么查询不起作用?没有理由不起作用。也许您还有另一个
userId
变量,它的大小写不同。@draconis您可能需要做一些实验。我同意leppie的观点,问题一定出在我们看不到的东西上。另外,说到名字的大小写: