4

我正在尝试根据与另一个表的关系来缩小我的 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 很好,所以我想知道在 RowFilter 的 SQL 中使用 DISTINCT 关键字是否有一些限制?有人知道吗?

4

5 回答 5

5

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

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

本文描述了问题和可能的解决方案。

于 2009-03-02T16:30:52.993 回答
3

不幸的是,您不能这样做,因为 RowFilter 属性不支持 distinct 关键字。以下是您可以在 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, [作为字符串的列名数组]);

于 2010-11-19T10:28:03.543 回答
2

以下代码从表/数据视图中提取不同的值/记录,即(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
于 2011-01-05T11:20:52.543 回答
2
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";
于 2011-05-20T10:55:37.863 回答
1

尝试忽略“DISTINCT”。在这种情况下,无论有无,结果都应该相同。从那里进行故障排除。

于 2009-03-02T16:27:27.150 回答