首先呢,是从一个文本文件里获取数据,然后存到datatable表里,记住数据库里面是没有的哦,因为今天的数据是不能加到数据库里的,所以只能读取到内存里,然后直接就在内存里进行统计的,有没有解决的方法....
我已经想了N天了,找了N天的答案了......
现在都没辙了.....
谢谢各位的帮助了....
我的分数不多了,希望各位不要嫌弃我分数给的太少,谢谢了.
我已经想了N天了,找了N天的答案了......
现在都没辙了.....
谢谢各位的帮助了....
我的分数不多了,希望各位不要嫌弃我分数给的太少,谢谢了.
比如 定义了一个 Datatable table,
有 Total,id 字段。
下面的代码将id=5的全部累加起来。object sumObject;
sumObject = table.Compute("Sum(Total)", "ID = 5");
foreach(DataRow dr in dt.Rows)
{
sum += int.Prase(dr["累加字段"].ToString());
}
1 训练 100 1
2 新手手册 300 2
3 训练 500 2
4 训练 120 1
要根据cItem来统计nMoney和nCount的累加和
结果:训练的nMoney=720,nCount=4
新手手册的nMoney=300,nCount=2
id cItem nMoney nCount
1 训练 100 1
2 新手手册 300 2
3 训练 500 2
4 训练 120 1
要根据cItem来统计nMoney和nCount的累加和
结果:训练的nMoney=720,nCount=4
新手手册的nMoney=300,nCount=2
*/
//定义表结构
DataTable table = new DataTable();
DataColumn c1 = new DataColumn("id");
DataColumn c2 = new DataColumn("cItem", System.Type.GetType("System.String"));
DataColumn c3 = new DataColumn("nMoney", System.Type.GetType("System.Int32"));
DataColumn c4 = new DataColumn("nCount", System.Type.GetType("System.Int32"));
//添加列
table.Columns.Add(c1);
table.Columns.Add(c2);
table.Columns.Add(c3);
table.Columns.Add(c4);
//构造行
DataRow r1 = table.NewRow();
r1[0] = "1";
r1[1] = "训练";
r1[2] = "100";
r1[3] = "1";
//构造行
DataRow r2 = table.NewRow();
r2[0] = "2";
r2[1] = "新手手册";
r2[2] = "300";
r2[3] = "2";
//构造行
DataRow r3 = table.NewRow();
r3[0] = "3";
r3[1] = "训练";
r3[2] = "500";
r3[3] = "2";
//构造行
DataRow r4 = table.NewRow();
r4[0] = "4";
r4[1] = "训练";
r4[2] = "120";
r4[3] = "1"; //添加行
table.Rows.Add(r1);
table.Rows.Add(r2);
table.Rows.Add(r3);
table.Rows.Add(r4);
//计算
//训练的nMoney=720,nCount=4
int nMoney1 = Convert.ToInt32(table.Compute("sum(nMoney)", "cItem='训练'"));
int nCount1 = Convert.ToInt32(table.Compute("sum(nCount)", "cItem='训练'")); //新手手册的nMoney=720,nCount=4
int nMoney2 = Convert.ToInt32(table.Compute("sum(nMoney)", "cItem='新手手册'"));
int nCount2 = Convert.ToInt32(table.Compute("sum(nCount)", "cItem='新手手册'"));
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.DataException: 无效的聚合函数 Sum()和类型 String 的用法。源错误:
行 80: //moneyObject = dt01.Compute("sum(nMoney)", "cItem='"+drItem["cItem"]+"'");
行 81: //countObject = dt01.Compute("sum(nCount)", "cItem='" + drItem["cItem"] + "'");
行 82: moneyObject = Convert.ToDouble(dt01.Compute("sum(nMoney)", "cItem='训练'"));
行 83: countObject = Convert.ToInt32(dt01.Compute("sum(nCount)","cItem='训练'"));
行 84: }
dt01.Columns.Add("id");
dt01.Columns.Add("cItem");
dt01.Columns.Add("nMoney");
dt01.Columns.Add("nCount");
dt01.Columns.Add("dDateTime"); DataRow dr = dt01.NewRow();//1
dr["id"] = "1";
dr["cItem"] = "新手训练";
dr["nMoney"] = "100";
dr["nCount"] = "1";
dr["dDateTime"] = "2009-11-02"; DataRow dr02 = dt01.NewRow();//2
dr02["id"] = "2";
dr02["cItem"] = "训练";
dr02["nMoney"] = "300";
dr02["nCount"] = "2";
dr02["dDateTime"] = "2009-11-02"; DataRow dr03 = dt01.NewRow();//3
dr03["id"] = "3";
dr03["cItem"] = "训练";
dr03["nMoney"] = "500";
dr03["nCount"] = "8";
dr03["dDateTime"] = "2009-11-02"; DataRow dr04 = dt01.NewRow();//4
dr04["id"] = "4";
dr04["cItem"] = "训练";
dr04["nMoney"] = "600";
dr04["nCount"] = "2";
dr04["dDateTime"] = "2009-11-02"; DataRow dr05 = dt01.NewRow();//5
dr05["id"] = "5";
dr05["cItem"] = "升级手册";
dr05["nMoney"] = "120";
dr05["nCount"] = "1";
dr05["dDateTime"] = "2009-01-02"; dt01.Rows.Add(dr);
dt01.Rows.Add(dr02);
dt01.Rows.Add(dr03);
dt01.Rows.Add(dr04);
dt01.Rows.Add(dr05);
//统计字段
foreach (DataRow drItem in tableview.Rows)
{
double moneyObject;
int countObject;
//moneyObject = dt01.Compute("sum(nMoney)", "cItem='"+drItem["cItem"]+"'");
//countObject = dt01.Compute("sum(nCount)", "cItem='" + drItem["cItem"] + "'");
moneyObject = Convert.ToDouble(dt01.Compute("sum(nMoney)", "cItem='训练'"));
countObject = Convert.ToInt32(dt01.Compute("sum(nCount)","cItem='训练'"));
}
//moneyObject = dt01.Compute("sum(nMoney)", "cItem='"+drItem["cItem"].ToStrin()+"'"); 看看,
dt01.Columns.Add("cItem", System.Type.GetType("System.String"));
dt01.Columns.Add("nMoney", System.Type.GetType("System.Int32"));
dt01.Columns.Add("nCount", System.Type.GetType("System.Int32"));
//moneyObject = dt01.Compute("sum(nMoney)", "cItem='"+drItem["cItem"].ToString()+"'");看看,
DataTable table = new DataTable();
DataColumn c1 = new DataColumn("id");
DataColumn c2 = new DataColumn("cItem", System.Type.GetType("System.String"));
DataColumn c3 = new DataColumn("nMoney", System.Type.GetType("System.Int32"));
DataColumn c4 = new DataColumn("nCount", System.Type.GetType("System.Int32"));
//添加列
table.Columns.Add(c1);
table.Columns.Add(c2);
table.Columns.Add(c3);
table.Columns.Add(c4);
//构造行
DataRow r1 = table.NewRow();
r1[0] = "1";
r1[1] = "训练";
r1[2] = "100";
r1[3] = "1";
//构造行
DataRow r2 = table.NewRow();
r2[0] = "2";
r2[1] = "新手手册";
r2[2] = "300";
r2[3] = "2";
//构造行
DataRow r3 = table.NewRow();
r3[0] = "3";
r3[1] = "训练";
r3[2] = "500";
r3[3] = "2";
//构造行
DataRow r4 = table.NewRow();
r4[0] = "4";
r4[1] = "训练";
r4[2] = "120";
r4[3] = "1"; //添加行
table.Rows.Add(r1);
table.Rows.Add(r2);
table.Rows.Add(r3);
table.Rows.Add(r4); var test = table.AsEnumerable();
var query =
from p in test
group p by p.Field<string>("cItem") into g
select new { item = g.Key, students = g }; foreach (var g in query)
{
Console.WriteLine("{0}的nMoney={1},nCount={2} ", g.item,
g.students.Sum(w => w.Field<int>("nMoney")),
g.students.Sum(w => w.Field<int>("nCount")));
}