Можете ли вы отсортировать Typed DataSet DataTables с помощью Linq OrderBy? - PullRequest
0 голосов
/ 12 октября 2010

У меня есть Typed DataSet DataTable, который наследует TypedTableBase<T>, который, в свою очередь, реализует IEnumerable<T>.Кажется, я не могу заставить это работать.

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

Вместо этого я должен назначить это утверждение для IEnumerable (или List), а затем вручную пополнить мой DataTable новым заказанным IEnumerable прежде чем я совершу.Это так и должно быть?Я думал о создании собственного метода расширения, который будет очищать / пополнять мои DataTables, но будет ли это целесообразно?

Примечание: Как правило, мне нужно сортировать только для целей просмотра с использованием DataView.Но в этом случае у меня есть пользовательская подпрограмма, которая должна создать новую базу данных доступа с требованиями сортировки, что означает, что мне нужно отсортировать фактическую таблицу данных, чтобы я мог повторно зафиксировать ее.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 12 октября 2010

Чтобы сделать то, что вы хотите, вы должны добавить следующую ссылку в ваш проект:

System.Data.DataSetExtensions

Как только вы добавите это,вы можете заказать вашу DataTable следующим образом:

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

// use the DataView generated from the LINQ query
DataView dtv = query.AsDataView();  

Чтобы выполнить итерацию по DataView, вы можете сделать следующее:

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

В качестве альтернативы вы можете выполнить тип через LINQ следующим образом:

var dtv = query.AsDataView().Cast<MyCustomRowType>();

// rowItem is of type MyCustomRowType...
foreach(var rowItem in dtv)
{
    // do something here...
}
2 голосов
/ 12 октября 2010

Методы расширения Linq не изменяют перечисляемый источник.

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

Если вы хотите отсортировать таблицу данных, вы должны использовать DataViews . Вы создаете представление для своей таблицы данных, затем применяете к ней сортировку или фильтр и затем привязываетесь к ней. Имейте в виду, что DataSets - это старая технология, которая не совсем в курсе последних и самых лучших. «Более новым» подходом было бы использование Entity Framework.

...