query - select specific columns from datatable in c# using linq
How do I get a distinct, ordered list of names from a DataTable using LINQ? (5)
I have a
column. I want to generate a collection of the unique names ordered alphabetically. The following query ignores the
var names = (from DataRow dr in dataTable.Rows orderby (string)dr["Name"] select (string)dr["Name"]).Distinct();
Why does the
not get enforced?
To abstract: all of the answers have something in common.
OrderBy needs to be the final operation.
To make it more readable and maintainable, you can also split it up into multiple LINQ statements.
First, select your data into a new list, let's call it
x1, do a projection if desired
Next, create a distinct list, from
x2, using whatever distinction you require
Finally, create an ordered list, from
x3, sorting by whatever you desire
Try the following
var names = (from dr in dataTable.Rows select (string)dr["Name"]).Distinct().OrderBy(name => name);
this should work for what you need.
You can use something like that:
dataTable.Rows.Cast<DataRow>().GroupBy(g => g["Name"]).Select(s => s.First()).OrderBy(o => o["Name"]);
var sortedTable = (from results in resultTable.AsEnumerable() select (string)results[attributeList]).Distinct().OrderBy(name => name);