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

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?


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 x1 into x2 , using whatever distinction you require
  • Finally, create an ordered list, from x2 into x3 , sorting by whatever you desire

  • 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 );
    

    var sortedTable = (from results in resultTable.AsEnumerable()
    select (string)results[attributeList]).Distinct().OrderBy(name => name);
    
    链接地址: http://www.djcxy.com/p/51322.html

    上一篇: 在C#中对IList进行排序

    下一篇: 如何使用LINQ从DataTable中获得独特的有序名称列表?