编写此 linq lambda 表达式并处理空值的正确方法是什么?

M B*_*son 0 c# linq lambda

虽然这是有效的,但我相当肯定有一种更简洁(和正确?)的方式来编写这个表达式。

    double currentPopulation = 0.0;
    if (detailmetrics.FirstOrDefault(dm => dm.MetricScopeID == 2 && dm.MetricTypeID == 1 &&
                                           dm.Timeframe.Equals("C")) != null)
    {
         currentPopulation = Convert.ToDouble(
             detailmetrics.FirstOrDefault(dm => dm.MetricScopeID == 2 && dm.MetricTypeID == 1 &&
                                          dm.Timeframe.Equals("C")
             ).MetricValue
         );
    }
Run Code Online (Sandbox Code Playgroud)

Bah*_*rom 5

简单地

double currentPopulation = detailmetrics
    .Where(dm => dm.MetricScopeID == 2 && dm.MetricTypeID == 1 && dm.Timeframe.Equals("C"))
    .Select(a => Convert.ToDouble(a.MetricValue))
    .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

  • 已投赞成票。如果没有项目满足“Where”谓词,则将“currentPopulation”设置为“0.0”。我知道这是故意的,但它与原始代码不同,在这种情况下,原始代码没有分配给“currentPopulation”。 (3认同)