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)
To abstract: all of the answers have something in common.
OrderBy needs to be the final operation.
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 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);