Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表如何获取小计_C#_Linq_List - Fatal编程技术网

C# 列表如何获取小计

C# 列表如何获取小计,c#,linq,list,C#,Linq,List,将同一主题的所有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 Li

将同一主题的所有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},    
};

如果您在TestScores定义中声明了SUBJECT属性,则您需要:

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

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

我想这可能就是您想要的

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();

你可以使用GroupBy。同一科目的所有分数是否应该有相同的小计?或者,如果这是一个连续的数字,即ID=0将有小计10,ID=1将有小计30?从设计角度来看,总值不应存储在每个实例中。它不是特定于实例的数据。你可以把它放在一个盒子里dictionary@BernhardHofmann:示例代码清楚地表明她指的是主题。学究式的字段名称不应全部大写
testScores
    .GroupBy(ts => ts.SUBJECT)
    .Select(g => new {
        Subject = g.Key, 
        Sum = g.Select(x => x.SCORE).Sum()
        })
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();