Can you sort Typed DataSet DataTables with Linq OrderBy?

后端 未结 2 1569
梦毁少年i
梦毁少年i 2021-01-25 22:05

I have a Typed DataSet DataTable which inherits TypedTableBase, which in turn implements IEnumerable. I can\'t seem to get this to wo

相关标签:
2条回答
  • 2021-01-25 22:51

    Linq extension methods do not alter the source enumerable.

    var numbers = new int[]{1,2,3};
    var reversed = numbers.OrderByDescending(x=>x);
    foreach(var number in reversed)
      Console.Write(number); // 321
    foreach(var number in numbers)
      Console.Write(number); // 123
    

    If you want to sort a DataTable, you should be using DataViews. You create a view on your DataTable, then apply a Sort or Filter to it, then bind against it. Keep in mind DataSets are an older technology and not quite up to date on the latest and the greatest. A "newer" approach would be to use the Entity Framework.

    0 讨论(0)
  • 2021-01-25 22:53

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