【问题标题】:How to find max value of a column in a datatable?如何在数据表中找到列的最大值?
【发布时间】:2013-04-15 07:16:06
【问题描述】:

我正在尝试在数据表中查找列的最大值。下面是我的代码

var maxVal = dsloadReferralCodes.Tables["dtReferralCodesTable"].AsEnumerable().Max(r =>  Convert.ToBoolean(int.TryParse(r.Field<string>("ROWNUM"), out intROWNUM)) ? (int?)intROWNUM : null);

下面是我在尝试获取最大值并将其分配给 intROWNUM 时遇到的错误

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

谁能帮我解决这个问题。这一直困扰着我很久。提前谢谢...

【问题讨论】:

  • 错误信息很清楚IMO..

标签: c# datatable dataset type-conversion


【解决方案1】:

您的字段ROWNUM 是十进制类型,您正在尝试将其转换为字符串,这就是您收到错误的原因。

应该是:

r.Field&lt;decimal&gt;("ROWNUM").ToString()

不太确定为什么要转换为布尔值并再次将 int 解析为 int。

您的查询应该是:

var maxVal = dsloadReferralCodes.Tables["dtReferralCodesTable"]
                    .AsEnumerable()
                    .Max(r => r.Field<decimal>("ROWNUM"));

【讨论】:

  • 感谢 Habib,感谢您的回答。这对我有帮助。但是如果数据表中没有数据,它看起来像它的抛出和错误。假设如果数据表为空而没有数据行,则这是错误。 “指定的演员表无效。”
  • @user545359,您应该检查表是否存在以及是否存在任何行,例如if(dsloadReferralCodes != null &amp;&amp; dsloadReferralCodes.Tables.Count &gt; 0 &amp;&amp; dsloadReferralCodes.Tables["dtReferralCodesTable"] != null &amp;&amp; dtReferralCodesTable.Tables["dtReferralCodesTable"].Rows.Count &gt; 0)
  • 再次感谢哈比卜。你的回答对我帮助很大。对于发布我的问题的答案,我深表歉意。我是 C# 和 Stackoverflow 论坛的新手。这个论坛真棒。
  • 感谢 Habib,很抱歉再次打扰您。我再次遇到同样的错误。我的代码如下。 if (dsloadReferralCodes.Tables["dtReferralCodesTable"] != null && dsloadReferralCodes.Tables["dtReferralCodesTable"].Rows.Count > 0) { var maxVal =dsloadReferralCodes.Tables["dtReferralCodesTable"].AsEnumerable().Max(r = > r.Field("ROWNUM"));数据行 drloadReferralCodes = dsloadReferralCodes.Tables["dtReferralCodesTable"].NewRow(); drloadReferralCodes["ROWNUM"] = maxVal + 1; dsloadReferralCodes.Tables["dtReferralCodesTable"].Rows.Add(drloadReferralCodes);}
  • 如果我的数据表中有数据,上面的代码就很好了。但是,如果我试图通过我的 UI 添加一个新行,它会抛出相同的错误。 “指定的演员表无效。”
【解决方案2】:

您可以通过DataTable.Select() 以简单的方式获得它:

DataRow [] dr = dsloadReferralCodes.Tables["dtReferralCodesTable"].Select("ROWNUM= MAX(ROWNUM)");  

 if(dr !=null)
    {
     // Console.WriteLine(dr[0]["RowNum"]);
        int maxVal=Convert.ToInt32(dr[0]["RowNum"]);
    }

【讨论】:

  • 您好,Arshad,感谢您的回复。看起来语法给了我数据表中的最大行。实际上我正在寻找特定列的最大值。假设列“rownum”的最大值是('8','9','10','11')。我想在这些值中找到最大值'11'。
  • 是的,我确实尝试了上述解决方案,并根据最大值返回整行。有什么方法可以获取 ROWNUM 列的最大值?
  • 现在我在使用更新后的代码后收到以下错误。无法将类型“System.Data.DataRow[]”隐式转换为“System.Data.DataRow”。
  • 这很好。现在我得到最大值。您能否告诉我如何将 dr[0]["RowNum"] 分配给整数。这样我就可以做一个 MAX+1 值。对不起,我是 C# 的新手。
【解决方案3】:

怎么样:

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

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

【讨论】:

    猜你喜欢
    • 2017-10-11
    • 1970-01-01
    • 2014-08-04
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 2012-01-08
    相关资源
    最近更新 更多