Почему этот оператор LINQ возвращает null, а не IEnumerable с count = 0 - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть метод, который должен выполнять следующие действия: - получать список объектов из веб-службы (работает должным образом) - возвращать подмножество этих объектов на основе пары критериев (не работает)

    private List<AliveDTO> getDeads()
    {
        List<AliveDTO> DTOs = APIRequests.Instance.GetAliveDTOs();

        var deads = DTOs.Where(x =>
            x.watchWindowStartTime.CompareTo(DateTime.Now) < 0 ||
            x.watchWindowEndTime.CompareTo(DateTime.Now) > 0 && 
            DateTime.Now > x.timeReceived.AddMinutes((double)x.NextAliveWithinMinutes));
        List<AliveDTO> deadInList = deads as List<AliveDTO>;
        return deadInList;
    }

Я ожидал, что переменная deads будет IEnumerable с count = 0, если ни один объект в списке не соответствует критериям, однако вместо этого я получаю нулевое значение.

Что я сделал не так

1 Ответ

0 голосов
/ 30 апреля 2019

Я думаю, проблема в том, что «мертвецы» не были бы списком. Это будет IEnumerable . Добавление команды LinT .ToList () сделает 'deads' типом List. Я также немного изменил бы его, так как вы создаете второй список ниже deads. :)

private List<AliveDTO> getDeads()
{
    List<AliveDTO> DTOs = APIRequests.Instance.GetAliveDTOs();

    return DTOs.Where(x =>
        x.watchWindowStartTime.CompareTo(DateTime.Now) < 0 ||
        x.watchWindowEndTime.CompareTo(DateTime.Now) > 0 && 
        DateTime.Now > x.timeReceived.AddMinutes((double)x.NextAliveWithinMinutes)).ToList();
}
...