C# LINQ选项内置查询+;日期时间比较

C# LINQ选项内置查询+;日期时间比较,c#,linq,C#,Linq,这个简单的查询工作并返回预期的4条记录 var showIfAfter=DateTime.Now.AddDays(-1); var query=_context.OTMLessons.Where(l=>l.Date>showIfAfter); 这个逐段构建的查询没有(假设状态==A) var query=\u context.OTMLessons.Include(“年”).Include(“给予者”) .其中(l=>!l.Hidden); 如果(状态!=null) 开关(状态){ 案例“A”:

这个简单的查询工作并返回预期的4条记录

var showIfAfter=DateTime.Now.AddDays(-1);
var query=_context.OTMLessons.Where(l=>l.Date>showIfAfter);
这个逐段构建的查询没有(假设状态==A)

var query=\u context.OTMLessons.Include(“年”).Include(“给予者”)
.其中(l=>!l.Hidden);
如果(状态!=null)
开关(状态){
案例“A”:
//仅当前记录(最后一天加上重要状态)
var showIfAfter=DateTime.Now.AddDays(-1);
query=query.Where(l=>l.Date>showIfAfter);
打破
案例“ND”:
//仅限未删除的记录
query=query.Where(l=>!l.Status.Equals(“已删除”);
打破
违约:
//特定国家的记录
query=query.Where(l=>l.Status.Equals(Status));
打破
}

请告诉我为什么我是一个白痴-拔出我的头发…

我相信你的问题在于
Include()

var query=\u context.OTMLessons.Where(l=>!l.Hidden);
如果(状态!=null)
开关(状态){
案例“A”:
//仅当前记录(最后一天加上重要状态)
var showIfAfter=DateTime.Now.AddDays(-1);
查询=查询。其中(l=>l.Date>showIfAfter)。包括(“年”)。包括(“给予者”);
打破
案例“ND”:
//仅限未删除的记录
query=query.Where(l=>!l.Status.Equals(“删除”)。包括(“年”)。包括(“给予者”);
打破
违约:
//特定国家的记录
查询=查询。其中(l=>l.Status.Equals(Status))。包括(“年”)。包括(“给予者”);
打破
}

可能看起来有点冗长;但在计算出日期/状态字段后,它应该包括子集集合

您的两个查询不同。第一条说:

_context.OTMLessons.Where(l => l.Date > showIfAfter);
第二条说(最终:

_context.OTMLessons.Include("Years").Include("Giver")
.Where(l => !l.Hidden && l.Date > showIfAfter);

您应该检查导致结果更改的差异。首先尝试使它们完全相同,然后开始添加更多条件。然后您可以检查结果更改的位置并验证您的数据。

您确定
。where l=>!l.Hidden)
正确吗?
\u context.OTMLessons.\u context.OTMLessons.Where(l=>!l.Hidden)
返回什么?已删除,与问题无关;断点预执行showIfAfter比较显示了预期结果,但没有看到更多代码,这很难调试。您是否100%确定状态“A”设置正确?这将导致您无法获得正确的数据。在第一个示例中,如果您更改为var query=\u context.OTMLessons.Include(“年”).Include(“给定者”)。其中(l=>!l.Hidden&&l.Date>showIfAfter);您是否仍能获得预期的4个记录?必须进行测试,是的:(可能是睡觉的时间了。。。