将WHERE添加到简单LINQ查询返回零结果(但不应该)

时间:2011-10-02 15:52:52

标签: c# linq linq-to-entities

我有以下查询:

var Query = db.ReportCommon
              .Where(x => x.ReportType == category)
              .Where(x => x.ReportDateTime >= dateStart)
              .Where(x => x.ReportDateTime < dateEnd);

category是我传入的变量(即“短”,“标准”等); dateStartdateEnd是DateTime值。

此查询按预期返回结果(大约300多个)。

但是当我添加以下行时,我得到零结果,而实际上我应该得到大约2或3个结果:

              .Where(x => x.PartnerRef.ToUpper() != "TEST");

只有大约3个条目PartnerRef字段包含'测试'或'测试'或'测试',其他字段为NULL或包含不同的合作伙伴参考(如'DSW')。

为什么会发生这种情况,我该如何解决?

4 个答案:

答案 0 :(得分:1)

您确定categorydateStartdateEnd的值是否相同?

另外,如果您使用

.Where(x => x.PartnerRef.ToUpper() == "TEST");

你得到你期望的2或3条记录吗?

您可能还想尝试在LINQPad中运行它,这将允许您体验并查看EF正在生成的SQL。

答案 1 :(得分:1)

您需要检查生成的SQL,但在SQL术语中,NULL!=“TEST”的计算结果为UNKNOWN,而不是TRUE,因此不会返回这些结果。

你可能希望EF足够聪明地发现这个陷阱并对SQL发出NULL检查,但考虑到问题中的所有内容,它可能看起来不是。

无法解释为什么没有返回其他PartnerRef值 - 这一切都指向了您未在问题中发现的其他一些外部因素。

答案 2 :(得分:0)

我不确定你的代码发生了什么。 但是,如果在某个条目“PartnerRef”为null,则PartnerRef.ToUpper()将抛出空引用异常。

您可以在某处处理该异常,但结果仍为空,因为查询从未实现过吗?

答案 3 :(得分:0)

LINQ to Databases不需要.ToUpper,因为sql查询不区分大小写。您可以尝试分析生成的SQL,以找出查询失败的原因。如果您仍需要帮助,请发布您的SQL。