Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ-仅当集合不为null时才选择最小值_C#_Linq_Mvvm - Fatal编程技术网

C# LINQ-仅当集合不为null时才选择最小值

C# LINQ-仅当集合不为null时才选择最小值,c#,linq,mvvm,C#,Linq,Mvvm,我有以下(简化)模型: 这个LINQ循环所有机器,循环所有类别,查看报告并检查最小日期时间(至少我认为它是这样做的) 当类别不包含任何元素时,就会出现问题。然后它返回一个错误,说明序列不包含任何元素 如果没有元素,如何更改LINQ以使其忽略类别 最终版本: 最后,检查集合是否不为null对我不起作用,因为我的集合包含0个元素(它在启动时初始化)。因此,我不得不稍微修改我对以下问题的回答: public ObservableCollection<ClockinReport_PerMachin

我有以下(简化)模型:

这个LINQ循环所有机器,循环所有类别,查看报告并检查最小日期时间(至少我认为它是这样做的)

类别不包含任何元素时,就会出现问题。然后它返回一个错误,说明
序列不包含任何元素

如果没有元素,如何更改LINQ以使其忽略类别

最终版本:

最后,检查集合是否不为null对我不起作用,因为我的集合包含0个元素(它在启动时初始化)。因此,我不得不稍微修改我对以下问题的回答:

public ObservableCollection<ClockinReport_PerMachine> MachineReport {get;set;}
PeriodFrom = MachineReport.Min(n => n.Categories.Where(b=>b.Report.Count>0).Min(x => x.Report.Max(z => z.Day)));

您应该测试表达式中的类别是否不为null。 差不多

PeriodFrom = MachineReport.Min(n => (n.Categories != null &&
n.Categories.Min(x => x.Report.Min(z => z.Day))));

您应该测试表达式中的类别是否不为null。 差不多

PeriodFrom = MachineReport.Min(n => (n.Categories != null &&
n.Categories.Min(x => x.Report.Min(z => z.Day))));

由于您选择的是最小值中的最小值,所以可以使用如下方法:

PeriodFrom = MachineReport
    .SelectMany(n =>
        n.Categories.SelectMany(x =>
            x.Report.SelectMany(z =>
                (DateTime?)z.Day
            )
        )
    )
    .DefaultIfEmpty()
    .Min();

请注意,当序列为空时,
Min()
将为您提供
null

由于您选择的是最小值(最小值的最小值),您可以使用如下方法:

PeriodFrom = MachineReport
    .SelectMany(n =>
        n.Categories.SelectMany(x =>
            x.Report.SelectMany(z =>
                (DateTime?)z.Day
            )
        )
    )
    .DefaultIfEmpty()
    .Min();

请注意,当序列为空时,
Min()
将为您提供
null

谢谢您的回答!RVid在几秒钟前发布了答案,因此不得不给他评分。谢谢你的回答!RVid在几秒钟前发布了答案,因此不得不给他评分。
PeriodFrom = MachineReport
    .SelectMany(n =>
        n.Categories.SelectMany(x =>
            x.Report.SelectMany(z =>
                (DateTime?)z.Day
            )
        )
    )
    .DefaultIfEmpty()
    .Min();