计算列表中属性的SUM

时间:2017-01-03 08:33:34

标签: c# linq sum

我有以下课程:

public class Summary
{
        public string Name { get; set; }
        public string Marks { get; set; }
}

使用样本数据

SummaryList.Add(new ActivitySummary() { Name = "ATT",  Marks = "200"});
SummaryList.Add(new ActivitySummary() { Name =  "CHARTER",  Marks ="600"});

我想将另一个List项添加到包含Total of Marks属性的列表中。

SummaryList.Add(new ActivitySummary() { Name =  "TOTAL",  Marks ="800"});

如何使用LINQ计算Marks属性的SUM?

4 个答案:

答案 0 :(得分:4)

要计算总和,请使用Sum

SummaryList.Add(new ActivitySummary() {
    Name =  "TOTAL",
    Marks = SummaryList.Sum(item => Convert.ToInt32(item.Marks)).ToString()
});

如果您的Marks属性仅包含整数,则将其设置为string类型是没有意义的。如果查询类型为int

,则可以简化查询
public class Summary
{
    public string Name { get; set; }
    public int Marks { get; set; }
}

SummaryList.Add(new ActivitySummary() {
    Name =  "TOTAL",
    Marks = SummaryList.Sum(item => item.Marks)
});

如果您的Marks属性不是整数,请使用decimalfloatdouble代替int(和Convert.ToDecimal,分别为Convert.ToSingleConvert.ToDouble

答案 1 :(得分:3)

首先,我会将您的Marks属性从字符串更改为int。 (Double也可以,但是你的例子只显示整数)。

所以它看起来像这样:

public class Summary
{
    public string Name { get; set; }
    public int Marks { get; set; }
}

然后,如果您有一个摘要对象列表(在您的示例中称为SummaryList),您可以计算这样的总和:

您必须使用.Select(...)才能隔离包含列表中所有标记的IEnumerable。之后,您可以使用.Sum(...)来总结所有这些值。

double sum = SummaryList.Select(x => x.Marks).Sum();

最后,您可以像这样添加最终摘要:

SummaryList.Add(new Summary() { Name = "TOTAL", Marks = sum });

我确定还有其他(更好)方法可以这样做,但在我看来,这个方法很容易理解。

编辑:我刚看到您无法将其更改为int,因此我会使用Sefe的答案。

答案 2 :(得分:1)

请尝试以下操作:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<ActivitySummary> SummaryList = new List<ActivitySummary>();

            SummaryList.Add(new ActivitySummary() { Name = "ATT", Marks = "200" });
            SummaryList.Add(new ActivitySummary() { Name = "CHARTER", Marks = "600" });

            int total = SummaryList.Select(x => int.Parse(x.Marks)).Sum();
            SummaryList.Add(new ActivitySummary() { Name = "TOTAL", Marks = total.ToString() });
        }
    }
    public class ActivitySummary
    {
        public string Name { get; set; }
        public string Marks { get; set; }
    }
}

答案 3 :(得分:0)

尝试以下方法:

    SummaryList.Add(new SummaryActivity() { Name = "TOTAL",Total = SummaryList.Sum( x=>Convert.ToDouble( x.Marks) ) });