C# 向简单LINQ查询添加WHERE将返回零结果(但不应为';t)

C# 向简单LINQ查询添加WHERE将返回零结果(但不应为';t),c#,linq,linq-to-entities,C#,Linq,Linq To Entities,我有以下疑问: var Query = db.ReportCommon .Where(x => x.ReportType == category) .Where(x => x.ReportDateTime >= dateStart) .Where(x => x.ReportDateTime < dateEnd); 只有大约3个条目的PartnerRef字段包含“Test”或“Tes

我有以下疑问:

var Query = db.ReportCommon
              .Where(x => x.ReportType == category)
              .Where(x => x.ReportDateTime >= dateStart)
              .Where(x => x.ReportDateTime < dateEnd);
只有大约3个条目的
PartnerRef
字段包含“Test”或“Test”或“Test”,其他条目为空或包含不同的Partner ref(如“DSW”)


为什么会发生这种情况?我如何修复它?

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


是否您正在某处处理该异常,但结果仍然为空,因为查询从未完成?

您确定
类别
日期开始
日期结束
的值相同吗

此外,如果您使用

.Where(x => x.PartnerRef.ToUpper() == "TEST");
你能得到你期望的2或3张唱片吗


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

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

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

您可能希望EF足够聪明,能够发现这个陷阱并向SQL中发出空检查,但是考虑到您所提出的所有问题,它似乎不是


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

什么是
db
?(即,您正在使用哪个LINQ提供程序?)db是我的实体上下文专用OnlineReportingEntityContext db=new OnlineReportingEntityContext();你能直接从你的SQL提供者那里给我们一个你所期望的那些行的读数吗?也许PartnerRef字段的某些内容与您期望的内容不完全一致。您确定数据库中没有值的尾随空格,这就是您没有得到任何匹配项的原因吗?谢谢。我确实有很多空条目,是的。但是,即使我删除了ToUpper(),我仍然会遇到同样的问题…如果是Linq to SQL查询提供程序对查询进行求值,则不会得到NRE。它们可能是,取决于数据库排序规则如何处理这些建议。。。如果我使用你的建议,那么,是的,我确实得到了我期望的记录。LINQPad看起来很有趣。。。我需要好好对付它。谢谢
.Where(x => x.PartnerRef.ToUpper() == "TEST");