从数据表中的给定列中获取最大值
Posted
技术标签:
【中文标题】从数据表中的给定列中获取最大值【英文标题】:Get the highest value from a given column in a datatable 【发布时间】:2015-10-20 19:25:08 【问题描述】:我有一个包含“待批准编号”列的数据表。我需要获得该列中的最高数字,以将其作为下一个可用数字显示给用户。我已经看到了一些如何做到这一点的例子,但我无法让它们工作。我知道我可以循环 DataTable 中的每个 DataRow 并检查值并存储它是否高于最后一个。但我知道必须有更好的方法。
以下是填充数据表的方式。
strSQL = "Select * from JobInvoice";
DataTable dtApprovalNumber = new DataTable();
mysqlDataAdapter daApprovalNumber = new MySqlDataAdapter(strSQL, conn);
daApprovalNumber.Fill(dtApprovalNumber);
欢迎更改 SQL 查询或将其从数据表中提取的代码。
编辑:在获得原始数字列的解决方案后,我发现我需要执行此操作的第二列是字符串。下面也提供了解决方案。
【问题讨论】:
【参考方案1】:如果您想在代码中而不是在 sql 中从 DataTable 中获取最高值,那么您可以使用 linq,如下所示:
int highestNumber = dtApprovalNumber.AsEnumerable().Max(x => x.Field<int>("SomeIntegerColumn");
编辑。
根据您的评论 - 如果您想从包含数字的字符串列中计算最大值(不明白为什么),您可以使用类似的方法:
int highestNumber = dtApprovalNumber.AsEnumerable().Max(x => int.Parse(x.Field<string>("SomeStringColumn")));
请注意,如果这些字符串值中的任何一个不可转换,它将失败,那么您将不得不以其他方式进行。
EDIT.2
由于我刚刚尝试过,我将与您分享 - 当您有字符串 Column 并且您不确定它们是否都可以转换(例如有些可能是空的)时的情况。见下文:
int tempVariable;
int highestNumber = dt.AsEnumerable()
.Where(x => int.TryParse(x.Field<string>("SomeColumn"), out tempVariable))
.Max(m => int.Parse(m.Field<string>("SomeColumn")));
【讨论】:
适用于待批号。我还有一个字符串字段,其中包含我需要获得最高的数值。这适用于字符串字段吗? 请在您的答案中保留原件 for int。 在这里,请阅读“请注意”部分,如果您的情况可能出现这种情况 - 请告诉我,我会为您准备另一个版本。 我知道。不知道为什么他们将字符串数字字段用于一个字段,将字符串用于另一个字段。但我无法控制数据库。 完美。谢谢 MajkeloDev【参考方案2】:Select max(`Pending Approval Number`) from JobInvoice
您可以执行 maxvalue + 1 以将其显示为下一个可用数字。
【讨论】:
这会只返回一个名为“Pending Approval Number”的高值列吗? 问题被标记为mysql
,所以[ ]
不起作用。此外,这将返回文字字符串'Pending Approval Number'
,而 mysql 需要反引号而不是单引号..
@dnoeth..thanks for pointing that out.modified it to replace ''
with ``
谢谢vkp。我将把它保存在我的 SQL 笔记中。以上是关于从数据表中的给定列中获取最大值的主要内容,如果未能解决你的问题,请参考以下文章