ZengCode.Com (The Thai Php Framework)  


Home   Download   Manual   About us    

Facebook   


MAIN MENU
News
Php Tips
Android Programming
Design Pattern By PHP
Spring+Strut+Hibernate
C# Tips & Technique
C# Design Pattern
Linux Quick Tips
C# using Linq น่าใช้จริงๆ
Java & JavaScript Tips
Database & SQL
ZengCode Framework Guide
Zeng Code Code
Programming
IPhone (Tips and Trick)

Download เอกสารที่น่าสนใจ

     DataTable Relational Operators in C# - INTERSECT Method, DISTINCT helper method & an apology  (2009-11-03)

If anybody can come up with a faster solution for Distinct it would be most appreciated.

public static DataTable Intersect(DataTable First, DataTable Second)

{

      //Get reference to Columns in First

      DataColumn[] firstcolumns  = new DataColumn[First.Columns.Count];

      for(int i = 0; i < firstcolumns.Length; i++)

      {

            firstcolumns[i] = First.Columns[i];

      }

      //Get reference to Columns in Second

      DataColumn[] secondcolumns  = new DataColumn[Second.Columns.Count];

      for(int i = 0; i < secondcolumns.Length; i++)

      {

            secondcolumns[i] = Second.Columns[i];

      }

      //JOIN ON all columns

      DataTable table = SQLOps.Join(First, Second, firstcolumns, secondcolumns);

      table.TableName = "Intersect";

      return table;

}

 

private static bool RowEqual(object[] Values, object[] OtherValues)

{

      if(Values == null)

            return false;

 

      for(int i = 0; i < Values.Length; i++)

      {

            if(!Values[i].Equals(OtherValues[i]))

                  return false;

      }                      

      return true;

} 

 

 

public static DataTable Distinct(DataTable Table, DataColumn[] Columns)

{

      //Empty table

      DataTable table = new DataTable("Distinct");

      //Sort variable

      string sort = string.Empty;

 

      //Add Columns & Build Sort expression

      for(int i = 0; i < Columns.Length; i++)

      {

            table.Columns.Add(Columns[i].ColumnName,Columns[i].DataType);

            sort += Columns[i].ColumnName + ",";

      }

      //Select all rows and sort

      DataRow[] sortedrows = Table.Select(string.Empty,sort.Substring(0,sort.Length-1));

     

      object[] currentrow = null;

      object[] previousrow = null;

     

      table.BeginLoadData();

      foreach(DataRow row in sortedrows)

      {

            //Current row

            currentrow = new object[Columns.Length];

            for(int i = 0; i < Columns.Length; i++)

            {

                  currentrow[i] = row[Columns[i].ColumnName];

            }

 

            //Match Current row to previous row

            if(!SQLOps.RowEqual(previousrow, currentrow))

                  table.LoadDataRow(currentrow,true);

 

            //Previous row

            previousrow = new object[Columns.Length];

            for(int i = 0; i < Columns.Length; i++)

            {

                  previousrow[i] = row[Columns[i].ColumnName];

            }

 

      }

      table.EndLoadData();

      return table;

 

}

 

public static DataTable Distinct(DataTable Table, DataColumn Column)

{

      return Distinct(Table, new DataColumn[]{Column});

}

public static DataTable Distinct(DataTable Table, string Column)

{

      return Distinct(Table, Table.Columns[Column]);

}

public static DataTable Distinct(DataTable Table, params string[] Columns)

{

      DataColumn[] columns = new DataColumn[Columns.Length];

      for(int i = 0; i < Columns.Length; i++)

      {

            columns[i] = Table.Columns[Columns[i]];

     

      }

      return Distinct(Table, columns);

}

public static DataTable Distinct(DataTable Table)

{

      DataColumn[] columns = new DataColumn[Table.Columns.Count];

      for(int i = 0; i < Table.Columns.Count; i++)

      {

            columns[i] = Table.Columns[i];

     

      }

      return Distinct(Table, columns);

}


Comment
Name
Comment
Security CodeCAPTCHA Image

web hit counter

This page took 0.047788 seconds to load.