我有以下方法可以返回特定日期范围和状态的作业。问题是,当我使用IEnumerable.Any时,它会返回所有作业,即使是那些没有指定状态的作业。有没有办法对其进行微调,以便只返回具有特定状态的作业?这是代码:
public List<JobDTO> GetJobList(int domainID, DateTime? dateFrom, DateTime? dateTo, PlannedTravelStopStatusTypeEnum status)
{
var context = new WebSchedulerContext();
var list = new List<JobDTO>();
if (dateFrom == null)
{
dateFrom = DateTime.MinValue;
}
if (dateTo == null)
{
dateTo = DateTime.MaxValue;
}
var jobs = context.Job.Include(j => j.PlannedJobStopDetails
.Select(jsd => jsd.PlannedTravelStop)
)
.Where(j => j.MinimumStartDate >= dateFrom && j.MaximumEndDate <= dateTo &&
**j.PlannedJobStopDetails.Any**(
jsd => jsd.PlannedTravelStop.PlannedTravelStopStatus == status
));
foreach (var job in jobs)
{
list.Add(new JobDTO(job));
}
return list;
}
有问题的代码片段是:
j.PlannedJobStopDetails.Any(jsd =>
jsd.PlannedTravelStop.PlannedTravelStopStatus == status)
答案 0 :(得分:1)
据我所知,// AutoCleanup due to Enterprise Analysis finding on the stack based array.
byte* plaintext = new byte[20480];
AutoCleanup<byte> cleanup(plaintext);
// Do something that could throw...
和Job
之间存在1:n关系。
在你的陈述中,你说:给我一份工作,如果任何的PlannedJobStopDetails
(这是一个集合)都有“状态”要查找。
也许您想说每个PlannedJobStopDetails
应该具有相同的状态?
然后你需要从“任何”更改为“全部”:
PlannedJobStopDetails
答案 1 :(得分:0)
j.PlannedJobStopDetails.Any(jsd => jsd.PlannedTravelStop.PlannedTravelStopStatus == status)
中的任何一个PlannedJobStopDetails
匹配PlannedTravelStopStatus
,则 status
会返回 true 。
如果您只想返回所有PlannedTravelStopStatus
符合您指定身份的作业,请使用All()
。
编辑:第二个想法,您确定PlannedJobStopDetails
实际上是EF了解的外键关系吗?