数据表列c#中的最大值

时间:2013-04-19 20:45:58

标签: c#-4.0 datatable

我有一组文本文件,我正在读取数据表。我希望能够读取frist列(Id)并找出最高的数字。每个文件顺序地从0到至少21。我尝试了以下链接中的建议:How to select min and max values of a column in a datatable?

可悲的是,我无法工作。有关工作的一个建议显示在倒数第二行,但它返回值为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;

2 个答案:

答案 0 :(得分:3)

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

创建int列:

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

strings转换为int并将其添加到表格中:

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)", "")

答案 1 :(得分:0)

我们可以使用此语法

从dataTable中的列中获取最大值

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