В C #, как лучше всего проверить, что набор данных пуст? - PullRequest
7 голосов
/ 07 сентября 2008

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

Ответы [ 6 ]

17 голосов
/ 07 сентября 2008

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

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

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

5 голосов
/ 07 сентября 2008

Что не так с

(aDataSet.Tables.Count == 0)

3 голосов
/ 07 сентября 2008

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

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

    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;
        }
2 голосов
/ 07 сентября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...