我必须在一个特定列上获取基于空值的行数。我使用了下面给出的代码。这里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)
答案 0 :(得分:2)
您当前的问题是,您尝试将ArrayList
转换为Int32
(Convert.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;