SELECCIONE DISTINCT en RowFilter de DataView

Estoy tratando de networkingucir las filas que están en mi DataView en function de una relación con otra tabla, y el RowFilter que estoy usando es el siguiente;

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

La tabla "myTable" y "myOther" están relacionadas a través de myTable.ID y myOtherTable.parentID, por lo que la idea es que DataView solo contenga filas de "myTable" que tengan filas secundarias correspondientes en "myOtherTable".

Lamentablemente, recibo este error;

Error de syntax: falta el operando después del operador 'DISTINCT'.

El SQL está bien, hasta donde yo sé, así que me pregunto si existe alguna limitación en el uso de la palabra key DISTINCT como parte del SQL de RowFilter. ¿Alguien tiene alguna idea?

Lamentablemente, no creo que pueda realizar una subconsulta en la expresión de filter de un DataView. Solo se le permite usar un subset de SQL en algunas expresiones (documentado aquí ).

Es probable que deba realizar su subconsulta ( SELECT DISTINCT parentID FROM myOtherTable ) por separado.

Este artículo describe el problema y una posible solución.

Lamentablemente no puede hacerlo de esa manera, ya que la propiedad RowFilter no es compatible con la palabra key distinta. Aquí está la list de expresiones que puede realizar en RowFilter (que es solo una Expresión de columna de datos): http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

DataViews tiene un método ToTable, y varias sobrecargas toman un boolean para especificar si se devuelven solo las filas distintas.

Aquí hay un método: http://msdn.microsoft.com/en-us/library/wec2b2e6.aspx

Así es como lo usarías:

DataTable newDataTable = myDataView.ToTable (true, [matriz de nombres de columnas como cadenas]);

Esta pregunta le mostrará cómo crear un set distinto (en realidad, una nueva tabla de datos) utilizando un DataView en una tabla. El enfoque es ligeramente diferente de lo que estás haciendo arriba.

el siguiente código extrae distintos valores / loggings de una tabla / vista de datos, concretamente (PROD_DESP_TRN) que tiene un campo (CONTAINER_NO). Finalmente, este código está llenando un cuadro combinado (cmbContainerNo) con valores / loggings únicos

Declaración de nivel de formulario:

 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 

Intente omitir el "DISTINCT". En este caso, los resultados deben ser iguales con o sin. Solucionar problemas desde allí.

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