2012-02-19 3 views
1

VB.net에서 DataTable Select 메서드로이 함수를 작성하는 함수가 있습니까? 내가 사용VB.NET에서 DataTable Select 메서드의 SQL IN 연산자

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

싶습니다

SQL 쿼리 나는 쿼리를 만들려면이 코드를하지만 난

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 

당신의 도움이

주셔서 감사합니다 절을에서 사용할 수 있다면 좋을 것입니다

답변

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인지 확실하지 않으므로 캐스트에 지정된 유형을 변경해야 할 수 있습니다. (나는 그것이 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 & ")" 

편집 (응답은 언급) :

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

답변을 보려면 제 편집문을 참조하십시오. –