C#Linq语句或foreach()用于总计子集?

C#Linq语句或foreach()用于总计子集?,第1张

概述哪种解决方案更受青睐? 对于列表: List<ExampleInfo> exampleList = new List<ExampleInfo>();public class ExampleInfo{ internal ExampleInfo() { } /* Business Properties */ public int Id { get; set; } 哪种解决方案更受青睐?

对于列表:

List<ExampleInfo> exampleList = new List<ExampleInfo>();public class ExampleInfo{    internal ExampleInfo()    { }    /* Business PropertIEs */    public int ID { get; set; }    public string Type { get; set; }    public decimal Total { get; set; }}

我希望根据“总计”值得到小计.

选项1:

var subtotal1 = exampleList.Where(x => x.Type == "Subtype1").Sum(x => x.Total);var subtotal2 = exampleList.Where(x => x.Type == "Subtype2").Sum(x => x.Total);

选项2:

decimal subtotal1 = 0m;decimal subtotal2 = 0m;foreach (ExampleInfo example in exampleList){    switch (example.Type)    {        case "Subtype1":            subtotal1 += example.Total;             break;        case "Subtype2":             subtotal2 += example.Total;             break;        default:             break;    }}

在大多数情况下,该列表将是< 10项. 编辑:克里斯提出了一个非常好的观点我没有提到.该程序已经在使用.NET Framework 3.5 SP1,因此兼容性不是一个重要的考虑因素.

解决方法 这两个示例都有重复的代码,并且两者都没有为Type上的更改做好准备 – 如果有三个值会怎样?如果有30个怎么办?
您可以使用linq对其进行分组并获得总数:
var totals = from p in exampleList             group p by p.Type into g             select new { Type = g.Key,Total = g.Sum(p => p.Total ) };

因此,总计是具有“属性”和“总计”属性的对象集合

总结

以上是内存溢出为你收集整理的C#Linq语句或foreach()用于总计子集?全部内容,希望文章能够帮你解决C#Linq语句或foreach()用于总计子集?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236289.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存