Создайте ADO.NET DataView, показывающий только выбранные столбцы

Можно ли в C# и .NET создать DataView, который включает только правильное подмножество DataColumn заданного DataTable?

С точки зрения реляционной алгебры, RowFilter присваивается для выполнения операции «выбора» (). Как можно выполнить операцию «проекции» ()?


person JaysonFix    schedule 29.07.2009    source источник


Ответы (4)


Вы не можете этого сделать, но вы можете создать копию таблицы только с нужными столбцами:

DataView view = new DataView(table);
DataTable table2 = view.ToTable(false, "FirstColumn", "SecondColumn", "ThirdColumn");

При желании вы можете вернуть строки, которые имеют разные значения для выбранных столбцов:

DataView view = new DataView(table);
DataTable table2 = view.ToTable(true, "FirstColumn", "SecondColumn", "ThirdColumn");
person Thomas Levesque    schedule 29.07.2009
comment
Спасибо, Томас. Я также хотел бы иметь возможность включать вычисляемые столбцы в таблицу2. Например, view.ToTable (FirstColumn * 2, SecondColumn › 0, TRIM(ThirdColumn)). - person JaysonFix; 29.07.2009
comment
создайте их в таблице и выберите их в ToTable или добавьте их в таблицу2 после ее создания... - person Thomas Levesque; 29.07.2009
comment
Вы можете сократить это, используя DefaultView DataTabe: $DataTable.DefaultView.ToTable("FirstColumn", "SecondColumn", "ThirdColumn"); - person Florian Feldhaus; 17.01.2015
comment
@ThomasLevesque, как добавить условие типа FirstColumn = 'comevalue'? - person Smith; 18.08.2016
comment
@Smith, вы можете добавить его при создании представления: new DataView(table) { RowFilter = "FirstColumn = 'somevalue'" } (или что-то в этом роде) - person Thomas Levesque; 18.08.2016

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

person Charles Bretana    schedule 29.07.2009

создайте представление данных как обмен из одной таблицы в другую и используйте dtswap в качестве источника данных.

DataView dw = new DataView(dtfee);
            DataTable dtswap = new DataTable();
            dtswap = dw.ToTable(true,"Fees", "FeeAmount", "Year", "CollectorName", "Month");
person aamir    schedule 30.03.2018

DataSet и связанные с ним типы не могут выполнять реляционные операции.

person John Saunders    schedule 29.07.2009