IEnumerable.Any

时间:2015-09-30 14:11:03

标签: c# linq

我有以下方法可以返回特定日期范围和状态的作业。问题是,当我使用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)

2 个答案:

答案 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了解的外键关系吗?