我有以下查询:
var Query = db.ReportCommon
.Where(x => x.ReportType == category)
.Where(x => x.ReportDateTime >= dateStart)
.Where(x => x.ReportDateTime < dateEnd);
category
是我传入的变量(即“短”,“标准”等);
dateStart
和dateEnd
是DateTime值。
此查询按预期返回结果(大约300多个)。
但是当我添加以下行时,我得到零结果,而实际上我应该得到大约2或3个结果:
.Where(x => x.PartnerRef.ToUpper() != "TEST");
只有大约3个条目PartnerRef
字段包含'测试'或'测试'或'测试',其他字段为NULL或包含不同的合作伙伴参考(如'DSW')。
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:1)
您确定category
,dateStart
和dateEnd
的值是否相同?
另外,如果您使用
.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。