C# 如何在数据表中查找列的最大值?

C# 如何在数据表中查找列的最大值?,c#,datatable,dataset,type-conversion,C#,Datatable,Dataset,Type Conversion,我试图在datatable中查找列的最大值。下面是我的代码 var maxVal = dsloadReferralCodes.Tables["dtReferralCodesTable"].AsEnumerable().Max(r => Convert.ToBoolean(int.TryParse(r.Field<string>("ROWNUM"), out intROWNUM)) ? (int?)intROWNUM : null); var maxVal=dsloadRef

我试图在datatable中查找列的最大值。下面是我的代码

var maxVal = dsloadReferralCodes.Tables["dtReferralCodesTable"].AsEnumerable().Max(r =>  Convert.ToBoolean(int.TryParse(r.Field<string>("ROWNUM"), out intROWNUM)) ? (int?)intROWNUM : null);
var maxVal=dsloadReferralCodes.Tables[“dtReferralCodesTable”].AsEnumerable().Max(r=>Convert.ToBoolean(int.TryParse(r.Field(“ROWNUM”),out intROWNUM))?(int?)intROWNUM:null);
下面是我在尝试获取最大值并将其分配给intROWNUM时遇到的错误id

无法将“System.Decimal”类型的对象强制转换为“System.String”类型


有人能帮我解决这个问题吗。长期以来,这一直困扰着我。提前感谢…

您的字段
ROWNUM
是decimal类型,您试图将其转换为string,这就是为什么会出现错误

应该是:

r.Field(“ROWNUM”).ToString()

不太清楚为什么要转换为布尔值并再次将int解析为int

您的查询应该是:

var maxVal = dsloadReferralCodes.Tables["dtReferralCodesTable"]
                    .AsEnumerable()
                    .Max(r => r.Field<decimal>("ROWNUM"));
var maxVal=dsloadReferralCodes.Tables[“dtReferralCodesTable”]
.可计算的()
.Max(r=>r.Field(“ROWNUM”);

您的字段
ROWNUM
是decimal类型,您试图将其转换为string,这就是为什么会出现错误

应该是:

r.Field(“ROWNUM”).ToString()

不太清楚为什么要转换为布尔值并再次将int解析为int

您的查询应该是:

var maxVal = dsloadReferralCodes.Tables["dtReferralCodesTable"]
                    .AsEnumerable()
                    .Max(r => r.Field<decimal>("ROWNUM"));
var maxVal=dsloadReferralCodes.Tables[“dtReferralCodesTable”]
.可计算的()
.Max(r=>r.Field(“ROWNUM”);

您可以通过以下简单方式获得:


您可以通过以下简单方式获得:

那么:

maxVal = (decimal) dsloadReferralCodes.Tables["dtReferralCodesTable"].Compute( "Min(ROWNUM)", string.Empty );
(这不使用LINQ,因此它也适用于.net 2.0)

关于:

maxVal = (decimal) dsloadReferralCodes.Tables["dtReferralCodesTable"].Compute( "Min(ROWNUM)", string.Empty );


(这不使用LINQ,因此它也适用于.net 2.0)

错误消息在我看来非常清楚。错误消息在我看来非常清楚。谢谢Habib,谢谢你的回答。这对我很有帮助。但若数据表中并没有数据,它看起来像是抛出错误。假设datatable为空,没有数据行,这就是错误。“指定的强制转换无效。”@user545359,您应该检查表是否存在,以及是否存在任何行,如
if(dsloadReferralCodes!=null&&dsloadReferralCodes.Tables.Count>0&&dsloadReferralCodes.Tables[“dtReferralCodesTable”!=null&&dtReferralCodesTable.Tables[“dtReferralCodesTable”]。rows.Count>0)
再次感谢Habib。你的回答对我帮助很大。我很抱歉把我的问题的答案贴出来了。我是C#和Stackoverflow论坛的新手。这个论坛真是太棒了。谢谢Habib,很抱歉再次打扰你。我又犯了同样的错误。我的代码如下。如果(dsloadReferralCodes.Tables[“dtReferralCodesTable”]!=null和&dsloadReferralCodes.Tables[“dtReferralCodesTable”]。Rows.Count>0){var maxVal=dsloadReferralCodes.Tables[“dtReferralCodesTable”].AsEnumerable().Max(r=>r.Field(“ROWNUM”);DataRow drloadReferralCodes=dsloadReferralCodes.Tables[“dtReferralCodesTable”].NewRow());drloadReferralCodes[“ROWNUM”]=maxVal+1;dsloadReferralCodes.Tables[“dtReferralCodesTable”].Rows.Add(drloadReferralCodes);}如果我的数据表中有数据,上面的代码是好的。但是,如果我试图通过UI添加新行,它会抛出相同的错误。“指定的强制转换无效。”谢谢Habib,谢谢您的回答。这对我很有帮助。但若数据表中并没有数据,它看起来像是抛出错误。假设datatable为空,没有数据行,这就是错误。“指定的强制转换无效。”@user545359,您应该检查表是否存在,以及是否存在任何行,如
if(dsloadReferralCodes!=null&&dsloadReferralCodes.Tables.Count>0&&dsloadReferralCodes.Tables[“dtReferralCodesTable”!=null&&dtReferralCodesTable.Tables[“dtReferralCodesTable”]。rows.Count>0)
再次感谢Habib。你的回答对我帮助很大。我很抱歉把我的问题的答案贴出来了。我是C#和Stackoverflow论坛的新手。这个论坛真是太棒了。谢谢Habib,很抱歉再次打扰你。我又犯了同样的错误。我的代码如下。如果(dsloadReferralCodes.Tables[“dtReferralCodesTable”]!=null和&dsloadReferralCodes.Tables[“dtReferralCodesTable”]。Rows.Count>0){var maxVal=dsloadReferralCodes.Tables[“dtReferralCodesTable”].AsEnumerable().Max(r=>r.Field(“ROWNUM”);DataRow drloadReferralCodes=dsloadReferralCodes.Tables[“dtReferralCodesTable”].NewRow());drloadReferralCodes[“ROWNUM”]=maxVal+1;dsloadReferralCodes.Tables[“dtReferralCodesTable”].Rows.Add(drloadReferralCodes);}如果我的数据表中有数据,上面的代码是好的。但是,如果我试图通过UI添加新行,它会抛出相同的错误。“指定的强制转换无效。”你好,阿尔沙德,谢谢你的回复。看起来语法给了我数据表中的最大行。实际上,我在寻找某一列的最大值。假设列“rownum”的最大值为('8'、'9'、'10'、'11')。我想在这些值中找到最大值,即“11”。是的,我尝试了上述解决方案,并根据最大值返回整行。有没有办法只获取列ROWNUM的最大值?在使用更新的代码后,现在我得到了以下错误。无法将类型“System.Data.DataRow[]”隐式转换为“System.Data.DataRow”。太好了,这样可以工作。现在我得到了最大值。您还可以告诉我如何将dr[0][“RowNum”]分配给整数吗。这样我就可以得到一个最大+1的值。对不起,我是C#的新手。嗨,阿沙德,谢谢你的回复。看起来语法给了我数据表中的最大行。实际上,我在寻找某一列的最大值。假设列“rownum”的最大值为('8'、'9'、'10'、'11')。我想在这些值中找到最大值,即“11”。是的,我尝试了上述解决方案,并根据最大值返回整行