2011-09-14 20 views
-1

所以,我有一个简单的linq查询。其他程序员(全部在Win7,VS2010上)都可以运行该选择而没有问题。我可以在我的机器上使用SQL Profiler命中服务器数据库(我们都在开发服务器上使用相同的SQL Server 2008数据库)并查看实际查询在我的机器上SQL Server Mgmt studio中的工作情况,但IQueryable对象返回0结果。linq查询适用于每台机器,但我的

我们都使用相同的确切代码库(一切都检查汞,我们都同步)。我已经重新启动了我的机器和数据库驻留的服务器,以防发生缓存。

如果我删除where子句,我实际上会得到结果。我们都处于亏损状态。任何人有任何明智的想法?

这里是如果你想看到的代码,但我不认为在这种情况下,重要的:

IQueryable<MOffice> offices = (from returnData in entityModel.MOffices 
              where returnData.HiringProjectCoordinator == true 
              select returnData).Take((int)topCount); 
      return offices.ToList(); 
+2

那么,你的机器或“代码和数据库完全相同”这种说法显然有些不同。是不正确的。无论哪种方式,我们几乎没有办法为您进行心理调试。一个问题,但; 'topCount'的价值是什么,它来自哪里,如果你完全去除了'Take(topCount)'调用会发生什么? –

+0

你绝对,完全,完全100%确定你正在和其他机器打到同一个数据库吗? –

+0

代码和db完全一样。 3个人为我证实了这一点。看到解决方案 - 现在固定,但绝对是我见过的最奇怪的事情。 – Mario

回答

1

试试这个

var results = entityModel.MOffices 
        .Where(x=>x.HiringProjectCoordinator == true) 
        .OrderBy(x=>x.Something) 
       //.Take(int.Parse(topCount)) 
        .ToList(); 
int count = results.Count(); 
return results; 

检查count是如您所愿。根据需要删除评论。

  • 查询是否适用于LinqPad
  • 确认每个人都在引用相同的数据库?当然?即将一个特定记录firstName改为'foo'以确定。
  • 对另一个表的类似查询是否相同?
+0

我也尝试过,它不起作用(再次,适用于所有其他开发人员机器) – Mario

+0

对不起,我以为你的意思是改变查询的风格。如果我不选择像你建议的topcount(采取),那么它的作品?!?!当然,我需要限制到10或20,那么你会建议什么? – Mario

+0

HAHA。我很难过。删除Take()并将其放回(完全相同的代码)后,它在我的机器上运行(或者也许是第三次重新启动)。 Thx寻求帮助 – Mario

-1

使用LinqPad然后检查生成的LINQ的SQL语句。

+0

如果您阅读我的问题,您会看到我使用Profiler来检查实际的SQL,并发现它执行的属性并返回了正确数量的结果 – Mario

相关问题