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

前端 未结 7 2054
谎友^
谎友^ 2020-12-09 14:40

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

相关标签:
7条回答
  • 2020-12-09 14:46
    var sortedTable = (from results in resultTable.AsEnumerable()
    select (string)results[attributeList]).Distinct().OrderBy(name => name);
    
    0 讨论(0)
  • 2020-12-09 14:47

    To abstract: all of the answers have something in common.

    OrderBy needs to be the final operation.

    0 讨论(0)
  • 2020-12-09 14:50

    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.

    0 讨论(0)
  • 2020-12-09 15:06

    Try out the following:

    dataTable.Rows.Cast<DataRow>().select(dr => dr["Name"].ToString()).Distinct().OrderBy(name => name);
    
    0 讨论(0)
  • 2020-12-09 15:08

    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
    0 讨论(0)
  • 2020-12-09 15:09

    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 );
    
    0 讨论(0)
提交回复
热议问题