Я знаю, что вы можете посмотреть на row.count или table.count, но есть ли другие способы узнать, пуст ли набор данных?
В С#, как лучше всего проверить, пуст ли набор данных?
Ответы (6)
Я бы предложил что-то вроде: -
bool nonEmptyDataSet = dataSet != null &&
(from DataTable t in dataSet.Tables where t.Rows.Count > 0 select t).Any();
Правки: я значительно подчистил код после должного рассмотрения, я думаю, что он стал намного чище. Большое спасибо Киту за вдохновение относительно использования .Any().
В соответствии с предложением Кейта, вот версия метода расширения этого подхода: -
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();
}
}
Обратите внимание, как правильно поправил меня Кит в комментариях к своему сообщению, этот метод будет работать, даже если набор данных равен нулю.
Что случилось с
(aDataSet.Tables.Count == 0)
?
Я создал небольшой статический класс использования только для этой цели.
Код ниже должен читаться как английское предложение.
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;
}
Я думаю, что это то место, где вы могли бы использовать метод расширения в C# 3 для улучшения удобочитаемости.
Используя идею Кроноза...
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 );
Чтобы было ясно, вам сначала нужно просмотреть все таблицы данных, а затем посмотреть количество строк для каждой таблицы данных.