Select Distinct from DataTable

ASP.Net

To select Distinct data from a particular DataTable, you need to add the following two methods:

 

The ColumnEqual method, which is private is used to compare field values:

private bool ColumnEqual(object A, object B)
{
        // Compares two values to see if they are equal. Also compares DBNULL.Value.
        // Note: If your DataTable contains object fields, then you must extend this
        // function to handle them in a meaningful way if you intend to group on them.        if ( A == DBNull.Value && B == DBNull.Value ) //  both are DBNull.Value
            return true;
        if ( A == DBNull.Value || B == DBNull.Value ) //  only one is DBNull.Value
            return false;
        return ( A.Equals(B) );  // value type standard comparison
}

 

 

The public method SelectDistinct, as the name implies, is used to get only the Distinct values from the table:

public DataTable SelectDistinct(string TableName, DataTable SourceTable, string FieldName)
{
        DataTable dt = new DataTable(TableName);
        dt.Columns.Add(FieldName, SourceTable.Columns[FieldName].DataType);        object LastValue = null;
        foreach (DataRow dr in SourceTable.Select(“”, FieldName))
        {
            if (  LastValue == null || !(ColumnEqual(LastValue, dr[FieldName])) )
            {
                LastValue = dr[FieldName];
                dt.Rows.Add(new object[]{LastValue});
            }
        }

        return dt;
}

 

 

Happy Selecting!!

references:
http://support.microsoft.com/default.aspx?scid=kb;en-us;326176#1
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: