tags:

views:

2713

answers:

6

I know you can look at the row.count or tables.count, but are there other ways to tell if a dataset is empty?

+4  A: 

What's wrong with

(aDataSet.Tables.Count == 0)

?

Joe R
it seems that the author defines "empty dataset" as dataset with no tables or with any number of empty tables.
vitule
If you look at the original post (click on edit link) you'll see that "or tables.count" has been added. Prior to that change, my question was sensible...
Joe R
A: 

To be clear, you would first need to look at all the DataTables, and then look at the count of Rows for each DataTable.

Portman
+11  A: 

I would suggest something like:-

  bool nonEmptyDataSet = dataSet != null && 
    (from DataTable t in dataSet.Tables where t.Rows.Count > 0 select t).Any();

Edits: I have significantly cleaned up the code after due consideration, I think this is much cleaner. Many thanks to Keith for the inspiration regarding the use of .Any().

In line with Keith's suggestion, here is an extension method version of this approach:-

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

Note, as Keith rightly corrected me on in the comments of his post, this method will work even when the data set is null.

kronoz
Ouch. I edited this one too many times I think... now it's a community post! Oh well. :-)
kronoz
+3  A: 

I have created a small static util class just for that purpose

Below code should read like an English sentence.

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

I would just put something like below code and be done with it. Writing a readable code does count.

        if (DataAccessUtil.DataSetIsEmpty(ds)) {
            return null;
        }
Sung Meister
+2  A: 

I think this is a place where you could use an extension method in C# 3 to improve legibility.

Using kronoz's idea...

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

Due to the fact that extension methods are always expanded by the compiler this will even work if the dataset being checked is null.

At compile time this is changed:

ds.IsNotEmpty();

//becomes

DataSetExtensions.IsNotEmpty( ds );
Keith
That's a nice idea, though to be pedantic the t.Rows.Any() line won't compile as dataSet.Tables.Rows is a DataRowCollection which doesn't implement IEnumerable<T> so .Any() is not available.
kronoz
Oh, and sorry to be even more horribly critical but the extension method will not work when the dataset is null, rather a NullReferenceException will be raised. In addition IsEmpty() is returning the opposite of what it should - it indicates whether it's *not* empty!!
kronoz
Thanks for the feedback. It will work with nulls though.
Keith
Ah, I didn't know that. That is very cool thank you for clearing that up :-)
kronoz