在DataView的RowFilter中选择DISTINCT

我正在尝试根据与另一个表的关系缩小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关键字作为RowFilter的SQL的一部分有一些限制吗? 有人有什么想法吗?

不幸的是,我认为你不能在DataView的filter表达式中执行子查询。 您只能在某些表达式中使用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/library/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)最后,此代码填充具有唯一值/记录的combobox(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”。 在这种情况下,结果应该相同或不相同。 从那里排除故障。

Interesting Posts