我有一个数据表,其中有一列"待批准编号"。我需要获得该列中的最高编号,以便向用户显示下一个可用的编号。我已经看到了一些如何做到这一点的例子,但我无法让它们发挥作用。我知道我可以循环DataTable中的每个DataRow并检查该值并保存它,如果它高于最后一个。但我知道必须有更好的方法。
以下是DataTable的填充方式。
strSQL = "Select * from JobInvoice";
DataTable dtApprovalNumber = new DataTable();
MySqlDataAdapter daApprovalNumber = new MySqlDataAdapter(strSQL, conn);
daApprovalNumber.Fill(dtApprovalNumber);
欢迎对SQL查询或代码进行更改以将其从数据表中拉出来。
编辑:获取原始数字列的解决方案后,我发现我需要执行此操作的第二列是字符串。解决方案也在下面提供。
答案 0 :(得分:2)
Select max(`Pending Approval Number`) from JobInvoice
您可以执行maxvalue + 1将其显示为下一个可用号码。
答案 1 :(得分:1)
如果你想在不在sql中的代码中从DataTable获得最高价值,那么你可以像下面这样使用linq:
int highestNumber = dtApprovalNumber.AsEnumerable().Max(x => x.Field<int>("SomeIntegerColumn");
EDIT。
根据你的评论 - 如果你想从一个包含数字的字符串列计算最大值(不知道为什么)你可以使用类似的东西:
int highestNumber = dtApprovalNumber.AsEnumerable().Max(x => int.Parse(x.Field<string>("SomeStringColumn")));
请注意,如果这些字符串值中的任何一个不可转换,则会失败,那么您将不得不以其他方式执行此操作。
EDIT.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")));