C# 对数据表中的列进行排序,查找百分位点和标准偏差

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

下面的表3是通过比较表1和表2构建的 我想对表3进行排序(表中有-ve个值) 私有静态数据表GetDataTabletFromCSVFile1(字符串csv\u文件\u路径1) { DataTable table2=新的DataTable(“真实”)

使用(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;
}