2010-05-26 104 views
0

我有一个LINQ to SQL查询,它在执行时不会返回任何数据。但是,当我调试时,我可以使用生成的SQL查询,插入变量的值,然后在SQL Management Studio中运行它以获取我期望的记录。我也在调试模式下获取变量的值。LINQ to SQL不会返回数据,但生成的SQL语句不会返回

有没有人遇到过这样的事情?

按照要求,LINQ声明(编辑表和列名):

var q1 = from rr in db.ABC 
     from rd in db.DEF 
     where rr.a == rd.b 
     where rr.c == rd.c 
     where rr.d.Equals(id) 
     where rr.c.Equals(anotherId) 
     select new 
     { 
      rr.d, rr.x, rr.a, 
      rr.y, rr.z, rr.v, 
      rr.e, rd.r 
     }; 

var r1 = q1.Single(); 

我用在其他地方成功非常相似的查询。

+3

我们可以看到你的linq语句吗? – Mantorok 2010-05-26 15:15:19

+1

我希望这不是实际的LINQ代码... – 2010-05-26 15:23:41

+0

除了我已经解释过的,或者其他吗? – 2010-05-26 15:26:16

回答

3

运行SQL Server配置文件,执行EXACT查询它正在运行(您不应该“插入”任何值),然后运行该查询。

你还在获得结果吗?
它插入正确的值吗?
Are you querying a nullable value?
您能告诉我们代码和生成的查询吗?

+0

它最终成为可空值的问题。如果你对我如何改善我的查询有所建议,请在结构上给我提供帮助。 – 2010-05-26 17:15:17

+0

@Chris:这是一个令我讨厌的bug,它已经让我多次陷入困境。如果这也影响了你,请访问[错误报告](https://connect.microsoft.com/data/feedback/details/545491/linq-to-entities-incorrect-handling-of-null-variables-in -where-clause),并让Microsoft知道这个错误也影响了你。 – 2010-05-26 17:23:24

+0

如果您想调整查询来清理它,请考虑使用连接而不是前两个where子句并将剩余where子句合并到一个语句中。 – smaclell 2010-05-27 13:11:35

2

我会仔细检查LINQ to SQL正在使用的连接字符串。它可能只是打错了数据库。

+0

我以为同样的事情。我先检查了一下,它是正确的。 – 2010-05-26 15:15:49

2

您是否运行Profiler以确保您认为stastation将具有的值实际上是发送到服务器的统计信息?

+0

刚刚尝试过,但需要获得此帐户的权限。将试图做到这一点。 – 2010-05-26 15:22:11