我正在尝试确定DataView
是否不包含数据。
lsSql = "Select col1, col2 from table where tableId = " + Id;
DataView loCheck = Global.db.GetDataView(lsSql);
if (loCheck .Count > 0)
{
checkSelected= true;
} else {
checkSelected= false;
}
目前,如果col1和col2为空,则返回2行(null),checkSelected始终等于true。
如何查看DataView是否包含任何数据?
答案 0 :(得分:2)
试试这个:
if (loCheck.Table.Rows.Count > 0)
{
checkSelected= true;
}
else
{
checkSelected= false;
}
答案 1 :(得分:1)
如果要根据两列的结果为null返回单个值,coalesce或nullif是您的sql方法。 (NullIf是相同的,但只有两个参数,而我建议3)
"Select coalesce(col1, col2, 'false') as result from table where tableId = " + Id
然后测试你的价值是微不足道的:
if(loCheck.Rows[0]["result"].ToString() == "false")
checkSelected= false;
else
checkSelected= true;
答案 2 :(得分:1)
您始终可以根据结果的“选择”检查长度,在两列中查找null,但您需要确定条件。如果EITHER 1在任一列中有值,您是否关心该行;或者如果任一列为空,您是否认为它被忽略...或者,您是否认为只有当两列都为空时它才会丢失数据...
chkSelected = loCheck.Table.Select( "Col1 is NOT null AND Col2 is NOT null" ).Length > 0;
然后,您可以将默认视图的过滤器设置为此子句以跳过NULL条目。
这也可以通过显式排除NULL记录直接应用于原始查询,因此只需在WHERE子句中添加一个就不会打扰它们
where tableId = someKey AND ( Col1 is not null AND Col2 is not null )
或
where tableId = someKey AND ( Col1 is not null OR Col2 is not null )