问题是计算得出的 SumCustomerDebt。
我需要根据 CustomerLocation 进行分组,但 CustomerDebt 在表中重复多次(对于每个客户,具有不同的值)。我需要计算 SumCustomerDebt - 作为每个客户的 CustomerDebt 的总和。对于每个客户,CustomerDebt 是 CustomerDebt 的平均值。
我该怎么做?
这是我的 C# 代码。
protected DataTable generateData()
{
DataTable dt = new DataTable();
DataColumn column1 = new DataColumn("salesId", Type.GetType("System.Int32"));
dt.Columns.Add(column1);
DataColumn column2 = new DataColumn("CustomerLocation", Type.GetType("System.String"));
dt.Columns.Add(column2);
DataColumn column3 = new DataColumn("CustomerID", Type.GetType("System.Int32"));
dt.Columns.Add(column3);
DataColumn column4 = new DataColumn("CustomerDebt", Type.GetType("System.Int32"));
dt.Columns.Add(column4);
DataColumn column5 = new DataColumn("SubTotal", Type.GetType("System.Int32"));
dt.Columns.Add(column5);
DataRow dr = dt.NewRow();
dr["salesId"] = 1;
dr["CustomerLocation"] = "Chichago";
dr["CustomerID"] = 1;
dr["CustomerDebt"] = 100;
dr["SubTotal"] = 10;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["salesId"] = 2;
dr["CustomerLocation"] = "Chichago";
dr["CustomerID"] = 1;
dr["CustomerDebt"] = 80;
dr["SubTotal"] = 40;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["salesId"] = 3;
dr["CustomerLocation"] = "Chichago";
dr["CustomerID"] = 2;
dr["CustomerDebt"] = 50;
dr["SubTotal"] = 30;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["salesId"] = 4;
dr["CustomerLocation"] = "Miami";
dr["CustomerID"] = 3;
dr["CustomerDebt"] = 20;
dr["SubTotal"] = 50;
dt.Rows.Add(dr);
return dt;
}
protected void test()
{
DataTable dt = generateData();
var result = from row in dt.AsEnumerable()
group row by new
{
CustomerLocation = row.Field<string>("CustomerLocation"),
} into grp
select new
{
CustomerLocation = grp.Key.CustomerLocation,
SumSubTotal = grp.Sum(r => r.Field<int>("SubTotal")),
OrderCount = grp.Count(),
SumCustomerDebt = grp.Sum(r => r.Field<int>("CustomerDebt")), //this is incorrect, how can i calculate it?
};
foreach (var item in result)
{
string info = string.Format("CustomerLocation={0},SumSubTotal={1},OrderCount={2},SumCustomerDebt={3}", item.CustomerLocation, item.SumSubTotal, item.OrderCount, item.SumCustomerDebt);
Console.WriteLine(info);
}
}
打印的信息应包含 2 行:
1) "CustomerLocation=Chichago,SumSubTotal=80,OrderCount=3, SumCustomerDebt=150" -> SumCustomerDebt 等于 140 = 90(对于 CustomerID=1 (100+80)/2 平均值)+ 50 (对于 CustomerID=2)
2) "CustomerLocation=Miami,SumSubTotal=50,OrderCount=1, SumCustomerDebt=20"