Navi's

Necessity, the mother of invention

  • Twitts

    • TCS gifts wristwatches to its workers, they don’t like it. Want jewellery, home instead a.msn.com/00/en-in/BBVYR… 4 days ago
    • RT @BBCHindi: अबू धाबी में पहले हिन्दू मंदिर का शिलान्यास वीडियो: रौनक कोटचा, अबू धाबी से, बीबीसी हिन्दी के लिए https://t.co/ARWFwzh1lO 5 days ago
    • RT @TimesNow: I worked in the interest of the nation and there has been an increase in the faith people have on my honesty: PM @narendramod5 days ago
    • RT @ANI: Priyanka Chaturvedi when asked on her recent song on Smriti Irani's degree, that will she continue it after joining Shiv Sena, a B… 6 days ago
    • RT @ANI: #WATCH Congress leader Hardik Patel slapped during a rally in Surendranagar,Gujarat https://t.co/VqhJVJ7Xc4 6 days ago
  • RSS My Reader

    • An error has occurred; the feed is probably down. Try again later.
  • Top Clicks

  • Advertisements
  • Visitor Map

    Locations of Site Visitors
  • Flag Counter

    free counters

Get Distinct from DataTable

Posted by Navi's on May 6, 2011


Most of the time we require to get Distinct data from DataTable. But there is no method in existing Framework. So, If you want to select distinct data for selected columns you can use bellow code snippets

private DataTable SelectDistinct(DataTable SourceTable, params string[] FieldNames)
{
     object[] lastValues;
     DataTable newTable;
     DataRow[] orderedRows;

     if (FieldNames == null || FieldNames.Length == 0)
          throw new ArgumentNullException("FieldNames");

     lastValues = new object[FieldNames.Length];
     newTable = new DataTable();

     foreach (string fieldName in FieldNames)
          newTable.Columns.Add(fieldName, SourceTable.Columns[fieldName].DataType);

     orderedRows = SourceTable.Select("", string.Join(", ", FieldNames));

     foreach (DataRow row in orderedRows)
     {
          if (!fieldValuesAreEqual(lastValues, row, FieldNames))
          {
               newTable.Rows.Add(createRowClone(row, newTable.NewRow(), FieldNames));

               setLastValues(lastValues, row, FieldNames);
          }
     }

     return newTable;
}

private bool fieldValuesAreEqual(object[] lastValues, DataRow currentRow, string[] fieldNames)
{
     bool areEqual = true;

     for (int i = 0; i < fieldNames.Length; i++)
     {
          if (lastValues[i] == null || !lastValues[i].Equals(currentRow[fieldNames[i]]))
          {
               areEqual = false;
               break;
          }
     }

     return areEqual;
}

private DataRow createRowClone(DataRow sourceRow, DataRow newRow, string[] fieldNames)
{
     foreach (string field in fieldNames)
          newRow[field] = sourceRow[field];

     return newRow;
}

private void setLastValues(object[] lastValues, DataRow sourceRow, string[] fieldNames)
{
     for (int i = 0; i < fieldNames.Length; i++)
          lastValues[i] = sourceRow[fieldNames[i]];
}

How to use? It’s very simple…

You have to just pass the DataTable in SelectDistinct function and array of selected columns that you want to get in new datatable.

string[] arr1 = { "Column1", "Column2", "Column3" }; 

DataTable dt=SelectDistinct(dtExisting,arr1);

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 )

Google photo

You are commenting using your Google 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 )

Connecting to %s

 
%d bloggers like this: