2009-03-02 10 views
4

私は、別のテーブルとの関係に基づいて自分のDataViewにある行を絞り込もうとしています。使用しているRowFilterは次のとおりです。DataViewのRowFilterでSELECT DISTINCTを使用する

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

「mytableは」と「myOther」テーブルがmyTable.IDとmyOtherTable.parentIDを経由して関連、及びそのアイデアは、データビューのみmyOtherTable」で対応する子行を持つ「mytableは」から行を含めるべきであるということですされています"

残念ながら、このエラーが発生しています。

Syntax error: Missing operand after 'DISTINCT' operator.

SQLは、私の知る限り承知していて結構ですので、私は思ったんだけどのRowFilterのSQLの一環として、DISTINCTキーワードを使用して、上のいくつかの制限がありますか?誰もが考えている?

答えて

5

残念ながら、私はDataViewのフィルタ式でサブクエリを実行できないと思います。一部の式ではSQLのサブセットのみを使用できます(hereを参照)。

おそらくサブクエリ(SELECT DISTINCT parentID FROM myOtherTable)を別々に実行する必要があります。

This articleは、問題と可能な解決策を説明しています。

+0

私はparentIDsの私自身の明確なリストを作成してからちょうどありがたいサポートされている「ID IN(...)」句(にそのリストを渡すことで問題を回避することにしましたDISTINCTまたはGROUP BYとは異なります)。 乾杯 –

1

"DISTINCT"を省略してみてください。この場合、結果は同じでもなくても同じでなければなりません。そこからトラブルシューティングを行います。

2

This questionは、テーブル上のDataViewを使用して異なるセット(実際には新しいデータテーブル)を作成する方法を示します。アプローチはあなたが上でやっていることとは若干異なります。

3

RowFilterプロパティはdistinctキーワードをサポートしていないため、残念ながらこのようにすることはできません。 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(真、[文字列として、列名の配列は、]);

2

次のコード、すなわち(PROD_DESP_TRN)最後に、このコードは、一意の値/レコードと

フォームコンボボックス(cmbContainerNo)が充填されているフィールド(CONTAINER_NO) を有する、テーブル/データビューから異なる値/レコードを抽出していますレベルの宣言:

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

将来的には、その価値が何であれ、コードだけではなく何かを追加してみてください。 –

関連する問題