c# - 使用 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) });
解决方案
在我看来,您只需要这样做:
public object DealerObj(Dealer d)
{
return new
{
d.DealerName,
totalCost = d.DealerCars.Sum(cc => cc.Cost),
};
}
这似乎是一个相当没有意义的方法。我很想知道你是如何使用上面的代码的,尤其是你如何将返回的object
东西变成有用的东西。
推荐阅读
- c# - 连接两个序列,其元素交错
- c - 发送文件大小,然后发送文件本身
- powershell - 不要在 PowerShell 脚本结果中显示取消
- ios - iOS:如何避免/禁用默认呼叫警报?
- c# - 在 Android 模拟器中使用 Chrome 运行 appium 测试时 ADB 命令超时
- clojure - Clojure 转换以下数据的方法是什么?
- java - 从接口方法返回一个或多个值的好方法
- javascript - React 代码“目标容器不是 DOM 元素”的问题。
- android - FirebaseMessagingService 中 onMessageReceived() 期间的操作
- amazon-athena - 按“$path”字段查询