0

总结所有相同 SUBJECT 的 TestScore 并将总值放入每个实例的最简单方法是什么?

public class TestScore
{
    public int ID { get; set; }
    public int SUBJECT { get; set; }
    public int SCORE { get; set; }
    public int SUBTOTAL { get; set; }
}

List<TestScore> testScores = new List<TestScore>{
    new TestScore{ ID = 0, SUBJECT = "MATH", SCORE = 10},
    new TestScore{ ID = 1, SUBJECT = "MATH", SCORE = 20},
    new TestScore{ ID = 2, SUBJECT = "ENGLISH", SCORE = 10},
    new TestScore{ ID = 3, SUBJECT = "ENGLISH", SCORE = 20},
    new TestScore{ ID = 4, SUBJECT = "ENGLISH", SCORE = 30},    
};

有没有类似的东西?

foreach (TestScore ts in testScores)
{
    ts.SUBTOTAL = Sum(testScores.SUBJECT == ts.SUBJECT);
}
4

3 回答 3

5

如果您SUBJECT在定义中声明了一个属性TestScores,这就是您所需要的:

var grouped = testScores.GroupBy(ts=>ts.SUBJECT)
                        .Select(g => new {SUBJECT = g.Key, 
                                          Sum = g.Sum(ts=> ts.SCORE)});

结果将是IEnumerable一个匿名类型,其中每个实例都有SUBJECTSum成员。

于 2013-10-07T15:47:24.530 回答
2
testScores
    .GroupBy(ts => ts.SUBJECT)
    .Select(g => new {
        Subject = g.Key, 
        Sum = g.Select(x => x.SCORE).Sum()
        })
于 2013-10-07T15:47:45.340 回答
1

我想这可能就是你所追求的。

public class TestScore
{
    public int ID { get; set; }
    public int TYPE { get; set; }
    public int SCORE { get; set; }
    public string SUBJECT { get; set; }
}

List<TestScore> testScores = new List<TestScore>{
    new TestScore{ ID = 0, SUBJECT = "MATH", SCORE = 10},
    new TestScore{ ID = 1, SUBJECT = "MATH", SCORE = 20},
    new TestScore{ ID = 2, SUBJECT = "ENGLISH", SCORE = 10},
    new TestScore{ ID = 3, SUBJECT = "ENGLISH", SCORE = 20},
    new TestScore{ ID = 4, SUBJECT = "ENGLISH", SCORE = 30},    
};

var tsList = from ts in testScores 
             group new {ts.SUBJECT,ts.SCORE} by ts.SUBJECT into grp 
             select new { Subject = grp.Key, Subtotal = grp.Sum(x => x.SCORE) };

foreach(var t in tsList)
    Console.WriteLine("Subject: {0} - Subtotal: {1}", t.Subject, t.Subtotal);

Console.WriteLine("Press Any Key to Exit...");    
Console.ReadKey();
于 2013-10-07T16:08:09.790 回答