SELECT DISTINCT em RowFilter de DataView
Pergunta
Eu estou tentando diminuir as linhas que estão no meu DataView com base em uma relação com outra tabela, eo RowFilter que estou usando é a seguinte:
dv = new DataView(myDS.myTable,
"id IN (SELECT DISTINCT parentID FROM myOtherTable)",
"name asc",
DataViewRowState.CurrentRows);
"myTable" e mesa "myOther" estão relacionados via myTable.ID e myOtherTable.parentID, e por isso a ideia é que o DataView deve conter apenas linhas de "myTable", que tem linhas filho correspondente no "myOtherTable".
Infelizmente, eu estou recebendo este erro;
Erro de sintaxe: Faltando operando depois operador 'DISTINCT'.
O SQL é bom, tanto quanto eu estou ciente, por isso estou perguntando se existe alguma limitação sobre o uso da palavra-chave DISTINCT como parte do SQL da RowFilter? Alguém tem alguma idéia?
Solução
Infelizmente, eu não acho que você pode executar uma subconsulta na expressão de filtro de um DataView. Você só está autorizado a usar um subconjunto de SQL em algumas expressões (documentado aqui ).
Você provavelmente vai precisar para realizar seu subconsulta (SELECT DISTINCT parentID FROM myOtherTable
) separadamente.
Este artigo descreve o problema e uma solução possível .
Outras dicas
Infelizmente você não pode fazê-lo dessa forma, como a propriedade RowFilter não suporta a palavra-chave distinta. Aqui está a lista de expressões que podem ser executadas em um RowFilter (que é apenas uma expressão de DataColumn): http://msdn.microsoft.com/en-us/library/system.data.datacolumn.expression.aspx
DataViews ter um método de Totable, e várias sobrecargas tomar um booleano para especificar se a retornar somente as linhas distintas.
Aqui está um método: http://msdn.microsoft.com/en -us / library / wec2b2e6.aspx
Aqui está como você iria utilizá-lo:
= DataTable newDataTable myDataView.ToTable (verdade, [variedade de nomes de coluna como cordas]);
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";
o código seguinte é extrair valores / registos distintas a partir de uma mesa / dataview, nomeadamente (PROD_DESP_TRN) tendo campo (CONTAINER_NO) Finalmente, este código está preenchendo um combobox (cmbContainerNo) com valores únicos / registros
Declaração Nível Forma:
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
Tente apenas deixando de fora o "DISTINCT". Neste caso, os resultados devem ser o mesmo com ou sem. Solucionar problemas de lá.