我有以下课程:
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?
答案 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
属性不是整数,请使用decimal
,float
或double
代替int
(和Convert.ToDecimal
,分别为Convert.ToSingle
和Convert.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) ) });