Linq的怪异行为
我有一个Windows窗体应用程序(.NET 4.0)与Sql Server CE 3.5数据库一起运行,我通过EF连接访问该数据库 这是我的初始查询,它返回两个结果: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
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的观点,问题一定出在我们看不到的东西上。另外,说到名字的大小写: