|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
中间码是基于一个虚拟机器。源代码是最高层的,理论上从源代码开始直接编译成本地码能提供最大优化的。而中间码只能是转译成本地码,效率上难免受到损耗。根据虚拟机器所设定的体系结构的特点,和本地机器的差异的多少。明天碰着一个需求,就是将上面表(1)格局的数据转换为表(2)格局的数据。很分明,这是一个行转列的请求,本想在数据库中行转列,由于在数据库中行转列是对照复杂的,办法能够参考本站SQLServer中(行列转换)行转列及列转行且加均匀值及汇总值,但因别的需求,终极需将该转化搬到C#中举行了。
客户称号日期金额A客户1月1000B客户2月1000C客户3月2000C客户4月2500
(表1)
客户称号1月2月3月4月算计A客户10000001000B客户01000001000C客户00200025004500
表(2)未几说了,上面入手下手在DataTable行转列示例:
//DataTable行转列
privateDataTableRCC(DataTable_outDataSource)
{
//从DataTable中读取不反复的日期行,用来机关新DataTable的列
DataTabledistinct_date=_outDataSource.DefaultView.ToTable(true,"日期");
DataTablenew_DataTable=newDataTable();
//将客户称号列增加到新表中
DataColumnnew_d_col=newDataColumn();
new_d_col.ColumnName="客户称号";
new_d_col.Caption="";
new_DataTable.Columns.Add(new_d_col);
StringBuilderstr_sum=newStringBuilder();
//入手下手在新表中机关日期列
foreach(DataRowdrindistinct_date.Rows)
{
new_d_col=newDataColumn();
new_d_col.DataType=typeof(decimal);
new_d_col.ColumnName=dr["日期"].ToString();
new_d_col.Caption=dr["日期"].ToString();
new_d_col.DefaultValue=0;
new_DataTable.Columns.Add(new_d_col);
//这个的目标是为算计列机关expression
str_sum.Append("+[").Append("日期").Append("]");
}
//将算计列增加到新表中
new_d_col=newDataColumn();
new_d_col.DataType=typeof(decimal);
new_d_col.ColumnName="Sum";
new_d_col.Caption="算计";
new_d_col.DefaultValue=0;
new_d_col.Expression=str_sum.ToString().substring(1);
new_DataTable.Columns.Add(new_d_col);
/*好了,到此新表已构建终了,上面入手下手为新表增加数据*/
//从原DataTable中读出不反复的客户称号,以客户称号为关头字来机关新表的行
DataTabledistinct_object=_outDataSource.DefaultView.ToTable(true,"客户称号");
DataRow[]drs;
DataRownew_dr;
foreach(DataRowdrindistinct_object.Rows)
{
new_dr=new_DataTable.NewRow();
new_dr["客户称号"]=dr["客户称号"].ToString();
foreach(DataRow_drindistinct_date.Rows)
{
drs=_outDataSource.Select("客户称号="+dr["客户称号"].ToString()+"and日期="+_dr["日
期"].ToString()+"");
if(drs.Length!=0)
{
new_dr[_dr["日期"].ToString()]=Math.Round(Convert.ToDecimal(drs[0]["金额"]),2);
}
}
new_DataTable.Rows.Add(new_dr);
}
returnnew_DataTable;
}
从下面的代码中看到我们并没无为新表"算计"这一列赋值,这是由于该列具有表达式str_sum.Append("+[").Append("日期").Append("]"),以是这列的值是会主动添补的。
注重,在下面的表达式中,我们加了[],在DataTable的表达式中,假如列名是中文,必定要为列名加上[],要否则会报错的,这也是我调试了很久才发明的。有专家说:java不是跨平台,java就是平台,这很好的定义了java的特点。有了java,你只需要等待java平台在新平台上移植。这还不错吧!只是,java不是一个平台,而是多个平台。你需要在这个java平台移植到另一个java平台。 |
|