나는 gridview를 필터링/정렬하는 데 사용되는 4 개의 드롭 다운 목록이 있습니다.Dynamic Where 절의 Linq 동적 오류
처음 세 개의 드롭 다운 중 하나라도 0 이외의 값을 선택하면 WhereFlag가 True로 설정됩니다. 네 번째 드롭 다운은 그리드가 정렬 된 열을 지정하는 데 사용됩니다.
있는 gridview 데이터 바인딩에 대한 나의 코드가 System.Linq.Dynamic를 사용하고 다음과 같습니다...
Dim dc As New DiaryDataContext
If WhereFlag = False Then
'This section works...
Dim AList = dc.D_AreaSubAreas _
.OrderBy(ddl_SortBy.SelectedValue)
Dim dl As List(Of D_AreaSubArea)
dl = AList.ToList
dl.Insert(0, New D_AreaSubArea With {.Ref = 0,
.Area = "",
.SubArea = "",
.Allocation = "Allocation...",
.Redundant = False})
gv_AreaSubArea.DataSource = dl
gv_AreaSubArea.DataBind()
'Gridview successfully binds
'If ddl_SortBy value is changed... Gridview binds OK.
Else
'This section gives error...
Dim WhereBuild As New StringBuilder
If ddl_AreaFilter.SelectedIndex <> 0 Then
WhereBuild.Append("Area = '" & ddl_AreaFilter.SelectedValue & "'")
AndFlag = True
End If
If ddl_SubAreaFilter.SelectedIndex <> 0 Then
If AndFlag = True Then
WhereBuild.Append(" AND ")
End If
WhereBuild.Append("SubArea = '" & ddl_SubAreaFilter.SelectedValue & "'")
AndFlag = True
End If
If ddl_AllocFilter.SelectedIndex <> 0 Then
If AndFlag = True Then
WhereBuild.Append(" AND ")
End If
WhereBuild.Append("Allocation = '" & ddl_AllocFilter.SelectedValue & "'")
End If
'ERROR HERE
Dim AList = dc.D_AreaSubAreas _
.Where(WhereBuild.ToString) _
.OrderBy(ddl_SortBy.SelectedValue)
'END ERROR
Dim dl As List(Of D_AreaSubArea)
dl = AList.ToList
dl.Insert(0, New D_AreaSubArea With {.Ref = 0,
.Area = "",
.SubArea = "",
.Allocation = "Allocation...",
.Redundant = False})
gv_AreaSubArea.DataSource = dl
gv_AreaSubArea.DataBind()
End If
내가 오류는 where 절을 동적으로입니다. 내가 얻는 오류는
입니다. ParseException은 사용자 코드로 처리되지 않습니다. 문자 리터럴은 정확히 하나의 문자를 포함해야합니다.
Else 포크의 쿼리 AList를 가리 킵니다. If와 Where 포크의 쿼리 사이의 유일한 차이점은 Where 절이 추가되었지만 내 코드가 잘못되었음을 추론 할 수 없었습니다. 아하.
jnovo 고마워요 ... 불행히도 귀하의 제안에 오류가 발생합니다. 문자열에서 유형으로 변환 Long이 유효하지 않습니다. 내 WhereBuild가 stringbuilder이고 연결되는 문자열이있는 버전을 사용해 보았습니다. 또한 VS2010에서 intellisence는 마지막 이스케이프 된 부분에 공백을 추가하여 & "\" "로 표시합니다.) – Mych
설명을 위해 모든 드롭 다운에서 문자열 값을 제공합니다. – Mych
@Mych이 사용자의 의견을 반영하여 답변을 업데이트했습니다. – jnovo