IEnumerable.Any
本文关键字:Any IEnumerable | 更新日期: 2023-09-27 18:15:13
我有以下方法,它返回特定日期范围和状态的作业。问题是,当我使用IEnumerable时。任何情况下,它都会返回所有作业,甚至是那些没有指定状态的作业。是否有一种方法可以对其进行微调,使其只返回具有特定状态的工作?下面是代码:
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)
据我所知,Job
和PlannedJobStopDetails
之间存在1:n的关系。
在你的声明中你说:给我一份工作,如果任何的PlannedJobStopDetails
(这是一个集合)有"状态"要找。也许你想说每个PlannedJobStopDetails
都应该有相同的状态?
然后你需要将"Any"改为"All":
var jobs = context.Job.Include(j => j.PlannedJobStopDetails
.Select(jsd => jsd.PlannedTravelStop)
)
.Where(j => j.MinimumStartDate >= dateFrom && j.MaximumEndDate <= dateTo &&
j.PlannedJobStopDetails.**All**(
jsd => jsd.PlannedTravelStop.PlannedTravelStopStatus == status
));
j.PlannedJobStopDetails.Any(jsd => jsd.PlannedTravelStop.PlannedTravelStopStatus == status)
返回true如果PlannedJobStopDetails
中有一个PlannedTravelStopStatus
匹配status
如果您只想返回所有PlannedTravelStopStatus
与给定状态匹配的作业,则使用All()
。
Edit:仔细想想,你确定PlannedJobStopDetails
实际上是EF理解的外键关系吗?