Pregunta

Estoy tratando de reducir las filas que se encuentran en mi DataView en función 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);

" myTable " y " myOther " la tabla se relaciona a través de myTable.ID y myOtherTable.parentID, por lo que la idea es que DataView solo debe contener filas de " myTable " que tienen filas secundarias correspondientes en " myOtherTable " ;.

Lamentablemente, estoy recibiendo este error;

  

Error de sintaxis: Falta el operando después   Operador 'DISTINCT'.

El SQL está bien, que yo sepa, así que me pregunto si hay alguna limitación en el uso de la palabra clave DISTINCT como parte del SQL de RowFilter. ¿Alguien tiene alguna idea?

¿Fue útil?

Solución

Lamentablemente, no creo que pueda realizar una subconsulta en una expresión de filtro de DataView. Solo se le permite usar un subconjunto de SQL en algunas expresiones (documentado here ).

Probablemente deba realizar su subconsulta ( SELECT DISTINCT parentID FROM myOtherTable ) por separado.

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

Otros consejos

Lamentablemente, no puede hacerlo de esa manera, ya que la propiedad RowFilter no admite la palabra clave distinta. Aquí está la lista de expresiones que puede realizar en un RowFilter (que es solo una expresión DataColumn): http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx

Las vistas de datos tienen un método ToTable y varias sobrecargas toman un valor booleano 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, [conjunto de nombres de columnas como cadenas]);

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

el siguiente código está extrayendo valores / registros distintos de una tabla / vista de datos, a saber, (PROD_DESP_TRN) que tiene el campo (CONTAINER_NO) Finalmente, este código está llenando un cuadro combinado (cmbContainerNo) con valores / registros ú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

Intenta simplemente omitir " DISTINCT " ;. En este caso, los resultados deben ser los mismos con o sin. Solucione los problemas desde allí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top