2012-02-19 116 views
1

VB.netのDataTable Selectメソッドでこれを記述する関数はありますか?私は、クエリを作成するには、このコードを持っているが、私は句VB.NETのDataTable SelectメソッドのSQL IN演算子

For Each typeitem In shapecb.Items 
     If Stntypeitem.Selected = True Then 
      If o = True Then 
       sqlfil += " AND Shape = '" + typeitem.Value + "'" 
      Else 
       sqlfil += "Shape = '" + typeitem.Value + "'" 
       o = True 
      End If 
     End If 
    Next 
    Dim bindtable As DataTable = dt.Clone 
    Dim rows As DataRow() = dt.[Select](sqlfil) 
    For Each row As DataRow In rows 
     bindtable.ImportRow(row) 
    Next 

はあなたの助け

いただきありがとうございますで使用できる場合、それはいいだろう使用

SELECT id from mytable where id in ('a','b','c') 

を希望することを

SQLクエリ

答えて

0

あなたがフィルタリングするLINQ-to-DataSetを使用することができ、あなたの

Dim shapes = {"a", "b", "c"} 
Dim tbl = (From row In dt.AsEnumerable 
      Where shapes.Contains(row.Field(Of String)("Shape"))).CopyToDataTable 

または流暢な構文でDataTable

tbl = dt.AsEnumerable.Where(Function(r) shapes.Contains(r.Field(Of String)("Shape"))).CopyToDataTable 
+0

素晴らしい!出来た! – shinya

0

どのタイプがよくわからないのですか?shapecbです。したがって、キャストで指定したタイプIを変更する必要があります。 (私はそれがSystem.Web.UI.WebControls.DropDownListだったと仮定。)

Dim strings = _ 
    From item In shapecb.Items.Cast(Of ListItem)() _ 
    Where item.Selected _ 
    Select "'" & item.Value & "'" 

Dim inList As String = String.Join(",", strings.ToArray()) 
Dim sql As String = "SELECT id FROM mytable WHERE id IN (" & inList & ")" 

EDIT (応答ではコメントを):

LINQは、代替、物事を行うには、多くの場合、より簡潔な方法を提供します。

Dim strings = New List(Of String) 

For i As Integer = 0 To shapecb.Items.Count - 1 
    Dim item As ListItem = shapecb.Items(0) 
    If item.Selected Then 
     strings.Add("'" & item.Value & "'") 
    End If 
Next 

Dim inList As String = String.Join(",", strings.ToArray()) 
Dim sql As String = "SELECT id FROM mytable WHERE id IN (" & inList & ")" 

伝統的な方法は通常、LINQの方が高速です。しかし、非常に大きな列挙型(> 100000)または非常に正確な測定を行った場合にのみ、違いを認識します。より使いやすいアプローチを選択してください。

+0

これは、LINQのとドロップダウンリストを反復処理する方法ですか?通常のループよりもパフォーマンスが向上しますか? – shinya

+0

答えは私の編集をご覧ください。 –