开发者

Can you sort Typed DataSet DataTables with Linq OrderBy?

开发者 https://www.devze.com 2023-01-19 13:11 出处:网络
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.

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 ext开发者_开发问答ension 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.


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...
}


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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号