ВЫБЕРИТЕ DISTINCT в RowFilter DataView - PullRequest
4 голосов
/ 02 марта 2009

Я пытаюсь сузить строки, которые находятся в моем DataView, на основе отношения с другой таблицей, и RowFilter, который я использую, выглядит следующим образом;

dv = new DataView(myDS.myTable,
                 "id IN (SELECT DISTINCT parentID FROM myOtherTable)",
                 "name asc",
                 DataViewRowState.CurrentRows);

«myTable» и таблица «myOther» связаны через myTable.ID и myOtherTable.parentID, и поэтому идея состоит в том, что DataView должен содержать только строки из «myTable», которые имеют соответствующие дочерние строки в «myOtherTable». *

К сожалению, я получаю эту ошибку;

Синтаксическая ошибка: отсутствует операнд после Оператор DISTINCT.

Насколько мне известно, с SQL все в порядке, поэтому мне интересно, есть ли какие-то ограничения на использование ключевого слова DISTINCT в качестве части SQL RowFilter? У кого-нибудь есть идеи?

Ответы [ 5 ]

5 голосов
/ 02 марта 2009

К сожалению, я не думаю, что вы можете выполнить подзапрос в выражении фильтра DataView. Вы можете использовать только подмножество SQL в некоторых выражениях (задокументировано здесь ).

Вам, вероятно, потребуется выполнить свой подзапрос (SELECT DISTINCT parentID FROM myOtherTable) отдельно.

В этой статье описывается проблема и возможное решение.

3 голосов
/ 19 ноября 2010

К сожалению, вы не можете сделать это таким образом, поскольку свойство RowFilter не поддерживает отдельное ключевое слово. Вот список выражений, которые вы можете выполнить в RowFilter (который является просто выражением DataColumn): http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

В DataViews есть метод ToTable, и для нескольких перегрузок используется логическое значение, указывающее, следует ли возвращать только отдельные строки.

Вот один из методов: http://msdn.microsoft.com/en-us/library/wec2b2e6.aspx

Вот как вы бы это использовали:

DataTable newDataTable = myDataView.ToTable (true, [массив имен столбцов в виде строк]);

2 голосов
/ 20 мая 2011
DataView dvBindAssignedByDropDown = new DataView();

DataTable dtBindAssignedByDropDown = new DataTable();

dvBindAssignedByDropDown = ds.Tables[0].DefaultView;


string[] strColnames=new string[2];

strColnames[0] = "RedNames";

strColnames[1] = "RedValues";

dtBindAssignedByDropDown = dvBindAssignedByDropDown.ToTable(true, strColnames);

ddlAssignedby.DataTextField = "RedNamesNames";
ddlAssignedby.DataValueField = "RedNames";
ddlAssignedby.DataSource = dtBindAssignedByDropDown;
ddlAssignedby.DataBind();
ddlAssignedby.Items.Insert(0, "Assigned By");
ddlAssignedby.Items[0].Value = "0";
2 голосов
/ 05 января 2011

следующий код извлекает различные значения / записи из таблицы / представления данных, а именно (PROD_DESP_TRN) с полем (CONTAINER_NO) Наконец, этот код заполняет комбинированный список (cmbContainerNo) уникальными значениями / записями

Декларация уровня формы:

Dim dsLocal As DataSet 
Dim dvm As DataViewManager
Private Sub FillcomboContainer()

    Try
        Dim dv As DataView = New DataView

        cmbContainerNo.DataSource = Nothing
        dv = dvm.CreateDataView(dsLocal.Tables("PROD_DESP_TRN"))
        dv.Sort = "CONTAINER_NO"

        cmbContainerNo.DataSource = dv.ToTable(True, "CONTAINER_NO")
        cmbContainerNo.DisplayMember = "CONTAINER_NO"

    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
    End Try
End Sub
1 голос
/ 02 марта 2009

Попробуйте просто пропустить "DISTINCT". В этом случае результаты должны быть одинаковыми с или без. Устранение неполадок оттуда.

...