为什么此LINQ语句返回null而不是count = 0的IEnumerable

时间:2019-04-30 12:32:18

标签: c# linq ienumerable

我有一个应该执行以下操作的方法: -从Web服务检索对象列表(按预期工作) -根据几个条件返回这些对象的子集(无效)

    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 :(得分:0)

我认为问题是“死者”不会成为名单。这将是一个 IEnumerable 。添加.ToList()Linq命令将使“死角”成为列表类型。我还要稍微重构一下,因为您将在死角下方创建第二个列表。 :)

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();
}