我知道你可以查看row.count或tables.count,但还有其他方法可以判断数据集是否为空?
答案 0 :(得分:17)
我建议像: -
bool nonEmptyDataSet = dataSet != null &&
(from DataTable t in dataSet.Tables where t.Rows.Count > 0 select t).Any();
编辑:经过充分考虑,我已经大大清理了代码,我认为这更清晰。非常感谢Keith关于使用.Any()的灵感。
根据Keith的建议,这是此方法的扩展方法版本: -
public static class ExtensionMethods {
public static bool IsEmpty(this DataSet dataSet) {
return dataSet == null ||
!(from DataTable t in dataSet.Tables where t.Rows.Count > 0 select t).Any();
}
}
请注意,正如Keith在他的帖子的评论中正确地纠正了我,即使数据集为空,这种方法也会有效。
答案 1 :(得分:5)
有什么问题
(aDataSet.Tables.Count == 0)
答案 2 :(得分:3)
我为此创建了一个小的静态util类
下面的代码应该像英文句子一样。
public static bool DataSetIsEmpty(DataSet ds)
{
return !DataTableExists(ds) && !DataRowExists(ds.Tables[0].Rows);
}
public static bool DataTableExists(DataSet ds)
{
return ds.Tables != null && ds.Tables.Count > 0;
}
public static bool DataRowExists(DataRowCollection rows)
{
return rows != null && rows.Count > 0;
}
我会把类似下面的内容放到代码中并完成它。 编写可读代码确实很重要。
if (DataAccessUtil.DataSetIsEmpty(ds)) {
return null;
}
答案 3 :(得分:2)
我认为这是一个可以在C#3中使用扩展方法来提高易读性的地方。
使用kronoz的想法......
public static bool IsNotEmpty ( this dataset )
{
return dataSet != null && (
from DataTable t in dataSet.Tables
where t.Rows.AsQueryable().Any()
select t).AsQueryable().Any();
}
//then the check would be
DataSet ds = /* get data */;
ds.IsNotEmpty();
由于扩展方法总是由编译器扩展,所以如果被检查的数据集为空,这甚至可以工作。
在编译时,这会改变:
ds.IsNotEmpty();
//becomes
DataSetExtensions.IsNotEmpty( ds );
答案 4 :(得分:0)
要明确的是,您首先需要查看所有DataTable,然后查看每个DataTable的行数。
答案 5 :(得分:0)
#region Extension methods
public static class ExtensionMethods
{
public static bool IsEmpty(this DataSet dataSet)
{
return dataSet == null || dataSet.Tables.Count == 0 || !dataSet.Tables.Cast<DataTable>().Any(i => i.Rows.Count > 0);
}
}
#endregion