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

前端之家收集整理的这篇文章主要介绍了C#Linq语句或foreach()用于总计子集?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
哪种解决方案更受青睐?

对于列表:

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&C++相关文章