我正在尝试根据与另一个表的关系缩小DataView中的行,而我正在使用的RowFilter如下;

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

" myTable的"和“我的其他” table通过myTable.ID和myOtherTable.parentID相关,因此我们的想法是DataView应该只包含来自“myTable”的行。在“myOtherTable”中有相应的子行。

不幸的是,我收到了这个错误;

  

语法错误:之后缺少操作数   'DISTINCT'算子。

据我所知,SQL很好,所以我想知道在使用DISTINCT关键字作为RowFilter SQL的一部分时是否存在一些限制?有人有任何想法吗?

有帮助吗?

解决方案

不幸的是,我认为你不能在DataView的过滤器表达式中执行子查询。您只能在某些表达式中使用SQL的子集(记录为这里)。

您可能需要单独执行子查询( SELECT DISTINCT parentID FROM myOtherTable )。

本文介绍了问题和可能的解决方案

其他提示

不幸的是,你无法这样做,因为RowFilter属性不支持distinct关键字。下面是您可以在RowFilter中执行的表达式列表(它只是一个DataColumn表达式): http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

DataViews有一个ToTable方法,有几个重载采用布尔值来指定是否只返回不同的行。

以下是一种方法: http://msdn.microsoft.com/en -us /库/ wec2b2e6.aspx

以下是您将如何使用它:

DataTable newDataTable = myDataView.ToTable(true,[列名作为字符串的数组]);

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";

以下代码从表/数据视图中提取不同的值/记录,即(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

尝试省略“DISTINCT”。在这种情况下,结果应该相同或不相同。从那里排除故障。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top