我有一组文本文件,我正在读取数据表。我希望能够读取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;
答案 0 :(得分:3)
问题是您已创建字符串列,但您希望根据其数值获取最大值。最好的方法是首先存储正确的类型。然后,您可以使用DataTable.Compute
或Linq-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);