对于列表:
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()用于总计子集?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)