列表中某些位置的元素总和

时间:2015-06-18 11:31:07

标签: c# linq

嗨我有字符串表的列表

List<string[]> PositionList23 = new List<string[]>();

该列表包含使用拆分从文件中获取的文档的位置。

每个字符串表都有5个元素: ProductCode,netvalue,vatvalue,grosvalue,vatrate

所以看起来像

  • xxx,10.00,2.00,12.00,20.00
  • xxz,15.00,3.00,18.00,20.00
  • xxy,20.00,1.00,12.00,5.00
  • xyy,40.00,2.00,41.00,5.00
  • xzz,40.00,3.20,41.00,8.00

我最终我希望有这样的结构:sum(netvalue),sum(vatvalue),sum(grosvalue),vatrate 所以在给定的考试中,它将是:

  • 25.00,5.00,30.00,&#34; 20.00&#34;
  • 60.00,3.00,63.00,&#34; 5.00&#34;
  • 40.00,3.20,43.20,&#34; 8.00&#34;

但请记住,该列表是字符串表,因此它没有像netvalue这样的名称,但总和必须基于表中的位置计算(例如,netvalue始终是2的元素)。并且该表是字符串,因此必须以某种方式转换求和元素。

我的代码:

var results =
        from row in PositionList
        group row by row[3] into grp
        //orderby grp.Key
        select new
        {
            VATRate = grp.Key,
            Net = grp.Sum(r => Convert.ToDouble(r[0])),
            Vat = grp.Sum(r => Convert.ToDouble(r[1])),
            Gros = grp.Sum(r => Convert.ToDouble(r[2]))
        };

但我在行中得到FormatException:Net = grp.Sum(r =&gt; Convert.ToDouble(r [0])),

(如何在评论中粘贴代码?)

1 个答案:

答案 0 :(得分:0)

你可以尝试一下吗,

var resultList = PositionList23.GroupBy(x => x[4]).Select(y => new string[]
                                        { 
                                            y.Sum(n => Convert.ToDecimal(n[1])).ToString(),
                                            y.Sum(v => Convert.ToDecimal(v[2])).ToString(),
                                            y.Sum(g => Convert.ToDecimal(g[3])).ToString(),
                                            y.Key.ToString()
                                        }).ToList();

编辑:

以您希望的方式格式化列表,

var resultList = PositionList23.GroupBy(x => x[4]).Select(y => new
                                        {
                                            NetValue = y.Sum(n => Convert.ToDecimal(n[1])),
                                            VatValue = y.Sum(v => Convert.ToDecimal(v[2])),
                                            GrossValue = y.Sum(g => Convert.ToDecimal(g[3])),
                                            VATRate = y.Key
                                        }).ToList();

希望这会有所帮助......