C# 对数据表中的列进行排序,查找百分位点和标准偏差
下面的表3是通过比较表1和表2构建的 我想对表3进行排序(表中有-ve个值) 私有静态数据表GetDataTabletFromCSVFile1(字符串csv\u文件\u路径1) { DataTable table2=新的DataTable(“真实”)C# 对数据表中的列进行排序,查找百分位点和标准偏差,c#,sorting,memory,datatable,C#,Sorting,Memory,Datatable,下面的表3是通过比较表1和表2构建的 我想对表3进行排序(表中有-ve个值) 私有静态数据表GetDataTabletFromCSVFile1(字符串csv\u文件\u路径1) { DataTable table2=新的DataTable(“真实”) 使用(TextFieldParser csvReader1=新的TextFieldParser(csv_文件_路径1)) { csvReader1.SetDelimiters(新字符串[]{,“}); csvReader1.HasFieldsEnc
使用(TextFieldParser csvReader1=新的TextFieldParser(csv_文件_路径1))
{
csvReader1.SetDelimiters(新字符串[]{,“});
csvReader1.HasFieldsEnclosedInQuotes=true;
字符串[]colFields=csvReader1.ReadFields();
foreach(colFields中的字符串列)
{
DataColumn datecolumn2=新的DataColumn(列);
datecolumn2.AllowDBNull=true;
表2.Columns.Add(datecolumn2);
}
而(!csvReader1.EndOfData)
{
字符串[]fieldData1=csvReader1.ReadFields();
//将空值设为null
for(int i=0;i
您只需使用:
DataView dv = new DataView(dt);
dv.Sort = "Diffusion, Program ,ADCI1_N[1],DCI1_P[1],ADCQ2_N[1]";
或者,如果要在同一数据表上执行
dt.DefaultView.Sort = "Diffusion, Program ,ADCI1_N[1],DCI1_P[1],ADCQ2_N[1]";
如果你使用Linq,你可以通过
var newDataTable = dt.AsEnumerable()
.OrderBy(m=> m.Field<decimal>("Diffusion"))
.ThenBy(m=> m.Field<decimal>("Program"))
.ThenBy(m=> m.Field<decimal>("ADCI1_N[1]"))
............
.CopyToDataTable();
将此str作为列名放入排序。专用静态数据表CompareTodatable(数据表表1、数据表表2)
private static DataTable CompareTwoDataTable(DataTable table1, DataTable table2)
{
DataTable table3 = new DataTable();
DataRow dr = null;
string filterExp = string.Empty;
for (int i = 0; i < table1.Rows.Count; i++)
{
string col = table1.Rows[i]["Par Name"].ToString();
if (table2.Columns.Contains(col))
{
if (!table3.Columns.Contains(col))
{
table3.Columns.Add(col, typeof(double));
filterExp = filterExp + col + " asc ,";
}
for (int j = 0; j < table2.Rows.Count; j++)
{
if (table3.Rows.Count != table2.Rows.Count)
{
dr = table3.NewRow();
table3.Rows.Add(dr);
}
table3.Rows[j][col] = (table2.Rows[j][col]);
}
}
}
DataTable resultDt = table3.Clone();
for (int m = 0; m < table3.Columns.Count; m++)
{
DataView dv = new DataView(table3);
dv.Sort = filterExp.Split(',')[m];
table3 = dv.ToTable();
for (int i = 0; i < table3.Rows.Count; i++)
{
if (resultDt.Rows.Count != table3.Rows.Count)
{
resultDt.Rows.Add();
}
resultDt.Rows[i][m] = table3.Rows[i][m];
}
}
return resultDt;
}
{
DataTable table3=新DataTable();
数据行dr=null;
string filterExp=string.Empty;
对于(int i=0;i
您希望如何排序?上升/下降?你的分类标准是什么?您希望使用哪一列对数据表进行排序?请不要在问题标题中包含有关所用语言的信息,除非没有它就没有意义。标记用于此目的。是否尝试在DataTable上使用“Select(filterExpression,sortOrder)”方法?请参见示例。我为您添加了一小段。是否可以在没有DataViews的情况下进行排序?我已经提到了第二段代码。列具有-ve值它不是排序-ve值。对于您提到的linq,强制转换无效。检查数据类型并进行相应的匹配。
string str=string.Empty;
foreach (DataColumn column in dt.Columns)
{
//write the logic so that last record doesnt have comma. leaving it to you.
str= str+ column.ColumnName +",";
}
private static DataTable CompareTwoDataTable(DataTable table1, DataTable table2)
{
DataTable table3 = new DataTable();
DataRow dr = null;
string filterExp = string.Empty;
for (int i = 0; i < table1.Rows.Count; i++)
{
string col = table1.Rows[i]["Par Name"].ToString();
if (table2.Columns.Contains(col))
{
if (!table3.Columns.Contains(col))
{
table3.Columns.Add(col, typeof(double));
filterExp = filterExp + col + " asc ,";
}
for (int j = 0; j < table2.Rows.Count; j++)
{
if (table3.Rows.Count != table2.Rows.Count)
{
dr = table3.NewRow();
table3.Rows.Add(dr);
}
table3.Rows[j][col] = (table2.Rows[j][col]);
}
}
}
DataTable resultDt = table3.Clone();
for (int m = 0; m < table3.Columns.Count; m++)
{
DataView dv = new DataView(table3);
dv.Sort = filterExp.Split(',')[m];
table3 = dv.ToTable();
for (int i = 0; i < table3.Rows.Count; i++)
{
if (resultDt.Rows.Count != table3.Rows.Count)
{
resultDt.Rows.Add();
}
resultDt.Rows[i][m] = table3.Rows[i][m];
}
}
return resultDt;
}