从数据表中的给定列中获取最大值
Get the highest value from a given column in a datatable
我有一个包含列 "Pending Approval Number" 的数据表。我需要获得该列中的最高数字,以便在下一个可用时显示给用户。我已经看到了一些如何执行此操作的示例,但我无法让它们工作。我知道我可以循环 DataTable 中的每个 DataRow 并检查值并存储它,如果它高于最后一个。但我知道必须有更好的方法。
DataTable 的填充方式如下。
strSQL = "Select * from JobInvoice";
DataTable dtApprovalNumber = new DataTable();
MySqlDataAdapter daApprovalNumber = new MySqlDataAdapter(strSQL, conn);
daApprovalNumber.Fill(dtApprovalNumber);
欢迎更改 SQL 查询或从数据表中提取它的代码。
编辑:在获得原始数字列的解决方案后,我发现我需要执行此操作的第二列是字符串。下面也提供了解决方案。
Select max(`Pending Approval Number`) from JobInvoice
您可以执行 maxvalue + 1 以将其显示为下一个可用数字。
如果您想在代码中而不是在 sql 中从数据表中获取最高值,那么您可以像下面这样使用 linq:
int highestNumber = dtApprovalNumber.AsEnumerable().Max(x => x.Field<int>("SomeIntegerColumn");
编辑。
根据您的评论 - 如果您想从包含数字的字符串列中计算最大值(不明白为什么)您可以使用类似的东西:
int highestNumber = dtApprovalNumber.AsEnumerable().Max(x => int.Parse(x.Field<string>("SomeStringColumn")));
请注意,如果这些字符串值中的任何一个不可转换,它将失败,那么您将不得不以其他方式进行转换。
编辑.2
由于我刚刚尝试过,所以我将与您分享 - 当您有字符串列并且您不确定它们是否都是可转换的(例如,有些可能是空的)时的情况。见下文:
int tempVariable;
int highestNumber = dt.AsEnumerable()
.Where(x => int.TryParse(x.Field<string>("SomeColumn"), out tempVariable))
.Max(m => int.Parse(m.Field<string>("SomeColumn")));
我有一个包含列 "Pending Approval Number" 的数据表。我需要获得该列中的最高数字,以便在下一个可用时显示给用户。我已经看到了一些如何执行此操作的示例,但我无法让它们工作。我知道我可以循环 DataTable 中的每个 DataRow 并检查值并存储它,如果它高于最后一个。但我知道必须有更好的方法。
DataTable 的填充方式如下。
strSQL = "Select * from JobInvoice";
DataTable dtApprovalNumber = new DataTable();
MySqlDataAdapter daApprovalNumber = new MySqlDataAdapter(strSQL, conn);
daApprovalNumber.Fill(dtApprovalNumber);
欢迎更改 SQL 查询或从数据表中提取它的代码。
编辑:在获得原始数字列的解决方案后,我发现我需要执行此操作的第二列是字符串。下面也提供了解决方案。
Select max(`Pending Approval Number`) from JobInvoice
您可以执行 maxvalue + 1 以将其显示为下一个可用数字。
如果您想在代码中而不是在 sql 中从数据表中获取最高值,那么您可以像下面这样使用 linq:
int highestNumber = dtApprovalNumber.AsEnumerable().Max(x => x.Field<int>("SomeIntegerColumn");
编辑。
根据您的评论 - 如果您想从包含数字的字符串列中计算最大值(不明白为什么)您可以使用类似的东西:
int highestNumber = dtApprovalNumber.AsEnumerable().Max(x => int.Parse(x.Field<string>("SomeStringColumn")));
请注意,如果这些字符串值中的任何一个不可转换,它将失败,那么您将不得不以其他方式进行转换。
编辑.2
由于我刚刚尝试过,所以我将与您分享 - 当您有字符串列并且您不确定它们是否都是可转换的(例如,有些可能是空的)时的情况。见下文:
int tempVariable;
int highestNumber = dt.AsEnumerable()
.Where(x => int.TryParse(x.Field<string>("SomeColumn"), out tempVariable))
.Max(m => int.Parse(m.Field<string>("SomeColumn")));