Search code examples
linqsql-order-bystrongly-typed-dataset

Can you sort Typed DataSet DataTables with Linq OrderBy?


I have a Typed DataSet DataTable which inherits TypedTableBase<T>, which in turn implements IEnumerable<T>. I can't seem to get this to work.

myDataTable.OrderBy(x => x.ID).ThenBy(y => y.ID2);

Instead I have to assign this statement to an IEnumerable(or List), then refill my DataTable manually with the newly ordered IEnumerable before I commit. Is this how it is intended to be? I've thought about creating my own extension method that will empty/refill my DataTables, but would this be wise?

Note: Typically I only need to sort for viewing purposes using DataView. But in this case I have a custom routine that must create a new access database with sorting requirements, which means I need to sort the actual DataTable so that I may re-commit it.

Thank you.


Solution

  • In order to do what you want, you must add the following reference to your project:

    System.Data.DataSetExtensions

    Once you have that added, you can order your DataTable like this:

    var query = myDataTable.OrderBy(x => x.ID).ThenBy(y => y.ID2);
    
    // use the DataView generated from the LINQ query
    DataView dtv = query.AsDataView();  
    

    In order to iterate through the DataView, you can do the following:

    var dtv = query.AsDataView();
    foreach(DataRowView rw in dtv)
    {
        // you can also cast back to the typed data...
        MyCustomRowType typedRow = (MyCustomRowType) rw.Row;
    
        // do something here...
    }
    

    Alternatively you can typecast via LINQ this way:

    var dtv = query.AsDataView().Cast<MyCustomRowType>();
    
    // rowItem is of type MyCustomRowType...
    foreach(var rowItem in dtv)
    {
        // do something here...
    }