Thursday, 13 July 2017

How do I get a distinct, ordered list of names from a DataTable using LINQ?

Question: I have a DataTable with a Name column. I want to have 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?

Solution:  To make it more readable and maintainable, you can also split it up into multiple LINQ statements.
  1. First, select your data into a new list, let's call it x1, do a projection if desired
  2. Next, create a distinct list, from x1 into x2, using whatever distinction you require
  3. Finally, create an ordered list, from x2 into x3, sorting by whatever you desire

No comments:

Post a Comment