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

时间:2013-04-15 07:16:06

标签: c# datatable dataset type-conversion

我试图找到数据表中列的最大值。以下是我的代码

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

及以下id我在尝试获取最大值并将其分配给intROWNUM时得到的错误

  

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

有人可以帮助我解决问题。这一直困扰着我。提前谢谢......

3 个答案:

答案 0 :(得分:2)

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

应该是:

r.Field<decimal>("ROWNUM").ToString()

不确定为什么要转换为Boolean并再次将int解析为int。

您的查询应该是:

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

答案 1 :(得分: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"]);
    }

答案 2 :(得分:0)

怎么样:

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

(这不使用LINQ,所以它也适用于.net 2.0)