Select distinct from datatable

serkan sendur 0 Tallied Votes 281 Views Share

Query your datatable like sql's "select distinct" statement

//the code is taken from microsoft.com (as far as i remember). I had hardtimes finding it
//so i wanted to share this with you 

using System;
using System.Data;
public class DataSetHelper
{
    public DataSet ds;
    public DataSetHelper(ref DataSet DataSet)
    {
        ds = DataSet;
    }
    public DataSetHelper()
    {
        ds = null;
    }
    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
    }
    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 });
            }
        }
        if (ds != null)
            ds.Tables.Add(dt);
        return dt;
    }

}
eranna 0 Newbie Poster

good

omeralper 0 Newbie Poster

For those who get similar problems, it is easy as this

DataView dw = myDataTable.DefaultView;
DataTable distinctDataTable = dw.ToTable(true, "someColumn");

Venjense 2 Light Poster

This is why Linq was created btw


Linq Examples

alokgolu 0 Newbie Poster

For those who get similar problems, it is easy as this

DataView dw = myDataTable.DefaultView;
DataTable distinctDataTable = dw.ToTable(true, "someColumn");

This code really worked for me and this saved my time for looping and then again getting
back a new table for distinct rows...Thanks a lot!!!!!!!:)

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.