Bezdepbonusu7Программирование: статьи и ответы

Вопрос

В С#, как лучше всего проверить, пуст ли набор данных?

Автор вопроса: RTiptonОтветов: 5

Я знаю, что вы можете посмотреть на row.count или table.count, но есть ли другие способы узнать, пуст ли набор данных?

Ответы

Ответ 1 · рейтинг 17 · Community

Я бы предложил что-то вроде: -

  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();
    }
  }

Обратите внимание, как правильно поправил меня Кит в комментариях к своему сообщению, этот метод будет работать, даже если набор данных равен нулю.

Ответ 2 · рейтинг 5 · Joe Ratzer

Что случилось с

(aDataSet.Tables.Count == 0)

?

Ответ 3 · рейтинг 3 · dance2die

Я создал небольшой статический класс использования только для этой цели.

Код ниже должен читаться как английское предложение.

    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;
        }

Ответ 4 · рейтинг 2 · Keith

Я думаю, что это то место, где вы могли бы использовать метод расширения в 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 );

Ответ 5 · Portman

Чтобы было ясно, вам сначала нужно просмотреть все таблицы данных, а затем посмотреть количество строк для каждой таблицы данных.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы