检查DataView是否为空

时间:2014-01-14 17:54:18

标签: c#

我正在尝试确定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是否包含任何数据?

3 个答案:

答案 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 )