2011-11-11 66 views
3

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

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

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

我真的很为难。任何想法这里发生了什么?

+0

你还没有真正告诉我们的问题是什么(我可以看到)类似的东西。返回两个结果你想要什么? – Ray

+0

查询应该返回两个结果,是的。但更广泛的问题是,为什么查询不起作用,如果我在where子句中使用变量而不是硬编码值? – draconis

+3

没有理由不应该工作。也许你有另一个'userId'变量具有不同的外壳。 – leppie

回答

-1

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

0

UserID是否可以为空?

如果是的话一定要做好.Where(up => up.UserID.HasValue && up.UserID.Value == userID)

我有一个可为空的日期时间,一旦