DataView的RowFilter中使用SELECT DISTINCT

4
我正在尝试根据与另一个表的关系来缩小我的DataView中的行,并且我正在使用的RowFilter如下:
dv = new DataView(myDS.myTable,
                 "id IN (SELECT DISTINCT parentID FROM myOtherTable)",
                 "name asc",
                 DataViewRowState.CurrentRows);

"myTable"和"myOtherTable"表通过myTable.ID和myOtherTable.parentID关联,因此DataView只应包含在"myOtherTable"中具有相应子行的"myTable"行。
不幸的是,我遇到了这个错误;
“语法错误:DISTINCT运算符后缺少操作数。”
据我所知,SQL是正确的,所以我想知道在RowFilter的SQL中使用DISTINCT关键字是否存在某些限制?有人有什么想法吗?"
5个回答

5

很遗憾,我不认为您可以在DataView的筛选表达式中执行子查询。您只能在某些表达式中使用SQL的子集(此处有文档记录)。

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

这篇文章描述了问题和一个可能的解决方案。


我决定通过创建自己的父ID清单来解决这个问题,然后将该清单传递到一个“id IN (...)”子句中(这个子句是可以被支持的,不像DISTINCT或GROUP BY)。祝好! - Chris McAtackney

3
很抱歉,您不能这样做,因为RowFilter属性不支持distinct关键字。以下是您可以在RowFilter(即DataColumn表达式)中执行的表达式列表:http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx DataView具有ToTable方法,多个重载采用布尔值指定是否仅返回不同的行。
以下是一种方法:http://msdn.microsoft.com/en-us/library/wec2b2e6.aspx 以下是如何使用它:
DataTable newDataTable = myDataView.ToTable(true,[列名的字符串数组]);

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

4
请在以后的工作中,尽量不仅仅给出代码,无论其价值如何,请添加更多内容。但是请注意,不能改变原意。 - Paweł Dyda

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

1

尝试仅剔除“DISTINCT”关键字。在这种情况下,结果应该是相同的,无论是否使用该关键字。从那里开始进行故障排除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接