Select Distinct Record from DataTable

If it is necessary to select distinct record from Data Table, then we can use following method.

        public DataTable SelectDistinct(DataTable SourceTable, string FieldName)
        {
            DataTable dt = new DataTable();
            dt = SourceTable.Clone();



            object LastValue = null;
            foreach (DataRow dr in SourceTable.Select("", FieldName))
            {
                if (LastValue == null || !(ColumnEqual(LastValue, dr[FieldName])))
                {
                    LastValue = dr[FieldName];
                    dt.ImportRow(dr);
                }
            }
            
            return dt;
        }
// This is used by SelectDistinct method
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
        }

Another Way:
We can use following way

 dt.DefaultView.ToTable( true, "your column name");
  • Alokgupta1889

    Use this instead of making such complicated loops :

     DataView dw = dtDropDownForBranch.DefaultView;
     DataTable distinctDataTable = dw.ToTable(true, “MonthValue”);

    • Anonymous

      Thanks for suggestion.. I think you have missed bottom line of my post. There i have shown your proposed approach.