无法转换类型为' System.Collections.ArrayList'的对象键入' System.IConvertible'

时间:2014-10-24 05:39:30

标签: c# asp.net

我必须在一个特定列上获取基于空值的行数。我使用了下面给出的代码。这里cad assign列包含值和空值。我必须计算cad_assign上有多少空值,并根据我必须显示值。

protected void ddlCircle_SelectedIndexChanged(object sender, EventArgs e)
{
    ArrayList list = new ArrayList();

    ShadingAnalysisDataSetTableAdapters.tbl_CadEngineersTeamTableAdapter cd;
    cd = new ShadingAnalysisDataSetTableAdapters.tbl_CadEngineersTeamTableAdapter();
    DataTable dt = new DataTable();
    dt = cd.GetAvailableData(ddlCircle.SelectedValue);// dt get values where cad_assign is null

    int x;
    foreach (DataRow dtrow in dt.Rows)
    {
      list.Add(dtrow); // here we getting dt count. 
    }
    x = Convert.ToInt32(list); // error popup here
}

SQL查询:

SELECT state1, district, site_id, site_name
FROM tbl_site_details
WHERE (state1 = @state1) AND (cad_assign IS NULL)

3 个答案:

答案 0 :(得分:2)

您当前的问题是,您尝试将ArrayList转换为Int32Convert.ToInt32不计算列表,它会尝试将给定对象转换为整数)。

如果您要对列表进行统计,可以使用ArrayList.Count

x = list.Count;

您可以更轻松地采取一步,不使用列表并直接计算行数:

x = dt.Rows.Count;

甚至可以更好地更改SQL以直接返回计数:

SELECT Count(1)
FROM tbl_site_details
WHERE (state1 = @state1) AND (cad_assign IS NULL)

我不确定您使用ShadingAnalysisDataSetTableAdapters获取标量结果到底有多准确,但您至少应该能够这样做:

var x = (int)dt.Rows[0][0];

答案 1 :(得分:1)

ArrayList实现ICollection,因此将拥有.Count属性以及Linq扩展方法。

如果你想要整体计数

x = list.Count;

表示空计数

x = list.Count(a => a == null);

答案 2 :(得分:0)

您正在将整数值列表转换为int,这是不可能的。

x = list.Count;