I have a DataTable
with a Name
column. I want to generate a collection of the unique names ordered alphabetically. The following query ignores the order by clause.
var names = (from DataRow dr in dataTable.Rows orderby (string)dr["Name"] select (string)dr["Name"]).Distinct();
Why does the orderby
not get enforced?
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.
A DataTable can be queried with LINQ, just as any other IEnumerable<T> list. Note: DataTable does not implement IEnumerable<T>. You have to call AsEnumerable, which is an extension method for DataTable, to obtain a wrapper that implements that interface.
To get unique elements. List<int> myList = list. Distinct(). ToList();
The problem is that the Distinct operator does not grant that it will maintain the original order of values.
So your query will need to work like this
var names = (from DataRow dr in dataTable.Rows select (string)dr["Name"]).Distinct().OrderBy( name => name );
To make it more readable and maintainable, you can also split it up into multiple LINQ statements.
x1
, do a projection if desiredx1
into x2
, using whatever distinction you requirex2
into x3
, sorting by whatever you desire If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With