在C#中,测试数据集是否为空的最佳方法是什么?
时间:2020-03-05 18:48:47 来源:igfitidea点击:
我知道我们可以查看row.count或者table.count,但是还有其他方法可以判断数据集是否为空吗?
解决方案
回答
怎么了
(aDataSet.Tables.Count == 0)
?
回答
为了清楚起见,我们首先需要查看所有DataTable,然后查看每个DataTable的行数。
回答
我建议类似的东西:
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在其帖子的评论中正确地纠正了我一样,即使数据集为空,此方法也将起作用。
回答
我为此创建了一个小的静态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; }
回答
我认为在这里可以在C3中使用扩展方法来提高可读性。
使用克罗诺兹的想法...
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 );