How to select distinct rows in a datatable and store into an array
DataView view = new DataView(table);
DataTable distinctValues = view.ToTable(true, "Column1", "Column2" ...);
DataTable dt = new DataTable();
dt.Columns.Add("IntValue", typeof(int));
dt.Columns.Add("StringValue", typeof(string));
dt.Rows.Add(1, "1");
dt.Rows.Add(1, "1");
dt.Rows.Add(1, "1");
dt.Rows.Add(2, "2");
dt.Rows.Add(2, "2");
var x = (from r in dt.AsEnumerable()
select r["IntValue"]).Distinct().ToList();
Following single line of code will avoid the duplicate rows of a DataTable
:
dataTable.DefaultView.ToTable(true, "employeeid");
Where:
first parameter in
ToTable()
is a boolean which indicates whether you want distinct rows or not.second parameter in the
ToTable()
is the column name based on which we have to select distinct rows. Only these columns will be in the returned datatable.
The same can be done from a DataSet
, by accessing a specific DataTable
:
dataSet.Tables["Employee"].DefaultView.ToTable(true, "employeeid");
With LINQ (.NET 3.5, C# 3)
var distinctNames = ( from row in DataTable.AsEnumerable()
select row.Field<string>("Name")).Distinct();
foreach (var name in distinctNames ) { Console.WriteLine(name); }