哪种解决方案更受青睐?
对于列表:
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; }
}
Run Code Online (Sandbox Code Playgroud)
我希望根据"总计"值得到小计.
选项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);
Run Code Online (Sandbox Code Playgroud)
选项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;
}
}
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,该列表将<10项.
编辑:克里斯提出了一个非常好的观点我没有提到.该程序已经在使用.NET Framework 3.5 SP1,因此兼容性不是一个重要的考虑因素.
无论列表大小如何,如果你的目标是.NET 3.5,我会选择LINQ,只是为了便于阅读.
我非常喜欢写你的意思,而不是它是如何完成的,LINQ在这种情况下使这很容易.
您甚至可以将计算拉入单个LINQ语句,按类型分组.这样你就不会有两个LINQ循环,只有一个循环,如第二个例子:
var subtotals = from x in exampleList
group x by x.Type into g
select new { Type = x.Key, SubTotal = g.Sum(x => x.Total) };
Run Code Online (Sandbox Code Playgroud)
(不完全确定代码是否像它一样工作,它只是从101个LINQ示例中的一个快速适应.但语法应该没问题.)
这两个示例都有重复的代码,并且都没有准备好进行更改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 ) };
Run Code Online (Sandbox Code Playgroud)
totals具有以下属性的对象的集合Type也是如此Total
| 归档时间: |
|
| 查看次数: |
4522 次 |
| 最近记录: |