首页 > 解决方案 > 使用 select new 和 where 引发错误的多个字段求和“模型”没有“总和”的定义

问题描述

C# 的第一个计时器,想看看我是否可以更改查询。基本上,我想要一次获得两个货币列的聚合值。有汽车经销商,每个经销商都有自己拥有的汽车清单。所以我想获得汽车经销商的名单以及他们旗下所有汽车的总成本。现在我正在做的是遍历每个经销商,获取汽车,然后将汽车循环到对每辆汽车的价格求和,这对我来说听起来效率低下。

public object DealerObj(Dealer d)
{
    var cars = d.DealerCars.Select(cc => new { cc.Cost }).ToList();

    var totalCost decimal = 0;
    foreach (var car in cars){
        totalCost += car.Cost;
    }

    return new {
        d.DealerName,
        totalCost = totalCost
    }
}

虽然我得到了正确的结果,但查询似乎变慢了。有没有办法对结果执行 Sum() 并避免循环,如下所示

   var cars = d.DealerCars.Select(cc => new { total = cc.Sum(s=>s.Cost) });

标签: c#linq

解决方案


在我看来,您只需要这样做:

public object DealerObj(Dealer d)
{
    return new
    {
        d.DealerName,
        totalCost = d.DealerCars.Sum(cc => cc.Cost),
    };
}

这似乎是一个相当没有意义的方法。我很想知道你是如何使用上面的代码的,尤其是你如何将返回的object东西变成有用的东西。


推荐阅读