2017-12-06 4 views
0

프록시 유형의 개체 목록을 필터링하려고합니다. 다음은 속성입니다.동적 쿼리를 사용하는 필터 목록?

Public Property IP As String 
Public Property Port As Integer 
Public Property Status As ProxyStatus 
Public Property Country As String 
Public Property Speed As Integer 

필터 양식에는 국가 이름이있는 CheckListBox가 있으며 국가를 선택하면 필터링 된 결과에 포함되어야합니다. 나는 이것에 대해 갈 수있는 방법을

Dim result = proxies.Where(Function(p) p.Country = "USA" OR p.Country = 
    "Russia") 

하지만 내 쿼리가 동적이기 때문에,에 따라 국가가 사용자 양식에 체크

가, 50가 말됩니다

은 내가 하드 LINQ의 likeso을 사용할 수 있습니다 알고 결과에 포함시키려는 국가는 무엇입니까? 나는 PredicateBuilder에 대해 읽었지만 Status 속성에 의해 필터링하고 Status = Valid 또는 Status = Unknown 인 프록시를 포함하고자하는 경우처럼 논리적 OR를 포함하는 예제를 찾지 못했습니까? 나는 사용자가 국가를 선택할 수 있습니다 방법을 알고하지 않기 때문에 내가 SelectedCountries을 사용했다

Dim countries As String() = SelectedCountries 
Dim result = proxies.Where(Function(p) countries.Contains(p.Country)) 

:

답변

3

당신은 수집 및 Contains를 사용할 수 있습니다. 하지만 그 배열 (또는 목록)을 만드는 것을 알고 있습니다.

는 또한 :

나는 예 상태 = 유효 또는 상태 = 알 수없는 를 들어, 동적 OR 문이 필요합니다. 다양한 체크 박스의 사용자 선택에이되는 종속

Dim allowedStatuses = SelectedStatuses 
result = result.Where(Function(p) allowedStatuses.Contains(p.Status)) 

당신은 내가 result = result.Where하지 proxies.Where을 사용 있습니다. 첫 번째 Where에서 OrElse을 사용하는 것과 유사한 여러 Where을 연결할 수 있습니다. 제 의견으로는 여기가 더 읽기 쉽습니다.

+0

안녕하세요, Tim. 그건 내 질문의 일부를 확실히 해결해 주셔서 고마워요. 동적 OR 구문이 필요한 경우 (예 : Status = Valid 또는 Status = Unknown)는 어떻습니까? 이것은 필터링 양식에있는 다양한 확인란의 사용자 선택에 따라 다릅니다. 당신이 내 질문의 마지막 부분으로 나를 도울 수 있다면 반드시 대답으로 표시 할 것입니다. –

+1

@DavidStampher :보세요 –

+0

@TimSchemlter 정확히 내가 뭘 찾고 있었습니까. 엄청 고마워. (27 초 그리고 나는 대답으로 표시 할 수있다. ..) –