0

我有一组正在读入数据表的文本文件。我希望能够阅读第一列(Id)并找出最高的数字。每个文件依次从 0 到至少 21。我尝试了以下链接中的建议:如何选择数据表中列的最小值和最大值?

可悲的是,我无法工作。一种可行的建议显示在倒数第二行,但它返回值 8 或 9。关于如何正确获得我正在寻找的结果的任何建议?

        string filePath = System.IO.Path.GetFullPath(curriculum);
        DataTable curriculmDataTable = new DataTable();

        curriculmDataTable.Columns.Add("Id");
        curriculmDataTable.Columns.Add("Course");
        curriculmDataTable.Columns.Add("Credit");

        // Read in a file line-by-line, and store it
        var txtFileLine = File.ReadAllLines(filePath).ToList();

        //Reads line splits data to colums at tab (ASCII value 9)
        txtFileLine.ForEach(line => curriculmDataTable.Rows.Add(line.Split((char)9)));


        //Suggestions from link
        int max = Convert.ToInt32(curriculmDataTable.Select("Id=max(Id)")[0][0]);   
        label1.Text = ""+ max;
4

2 回答 2

4

问题是您已经创建了字符串列,但您想根据它们的数值获取最大值。最好的方法是首先存储正确的类型。然后你可以使用DataTable.ComputeLinq-To-DataSet

创建一个int列:

 curriculmDataTable.Columns.Add("Id", typeof(int));

转换stringsint并将它们添加到表中:

foreach(string line in File.ReadLines(filePath))
{
    DataRow row = curriculmDataTable.Rows.Add();
    string[] fields = line.Split(new[]{(char)9});
    int id;
    if(fields.Length == 3 && int.TryParse(fields[0], out id)
    {
        row.SetField("Id", id);
        row.SetField("Course", fields[1]);
        row.SetField("Credit", fields[2]);
    }
}

现在您可以使用 Linq:

int maxID = curriculmDataTable.AsEnumerable().Max(r => r.Field<int>("Id"));

DataTable.Compute(也适用于早期的 .NET 版本):

int maxID = (int)curriculmDataTable.Compute("Max(Id)", "")
于 2013-04-19T20:56:35.163 回答
0

我们可以使用这种语法从数据表中的列中获取最大值

var maxValue = dataTblDetails.Compute("max(ColumnName)", string.Empty);

于 2015-04-11T06:20:09.307 回答