2010-06-22 8 views
0

특정 클래스의 메서드 이름 (키)과 설명 (값)을 포함하는 특수 문자열 사전 (string, string) (_RulesAndTheirDescriptions)이 있습니다. 나는 현재 다음 쿼리를 수행하여 키 또는 값의 일치 항목을 검색 한 다음 그리드에 바인딩합니다. 위대한 작품! 아마도 "단어"또는 "내 말을"일치하지만 "이" "내"와 "단어"로 검색하고자 할 때LINQ를 사용하여 문자열 목록과 일치하는 데이터 찾기

Dim Results = From v In _RulesAndTheirDescriptions _ 
Where v.Value.ToString().ToUpper().Contains(Me.txtSearchFor.Text.ToUpper()) _ 
Or v.Key.ToString().ToUpper().Contains(Me.txtSearchFor.Text.ToUpper()) _ 
Order By v.Key _ 
Select New With {.Rule = v.Key, .Description = v.Value.ToString()} 

이 잘 작동합니다. 의미있는 단어와 구는 공백으로 구분됩니다. 구글과 빙처럼. 사용자가 값을 입력하면 해당 구가 인용되어야합니다. 다음 RegEx가 사용자가 찾고있는 단어/구문을 가져옵니다. 이제 새로운 향상된 목록과 작동하는 위 쿼리를 결합하는 데 어려움을 겪고 있습니다.

아래 코드를 사용하십시오. 나는 일을 시험하고 작동 시키려고 노력하고 있습니다.

Dim b As Match 
b = Regex.Match(Me.txtSearchFor.Text, "(?<=(?:^|\s|,)"")[^""]*?(?="")|(?<=\s|^)(?!"")[\w\W]+?(?=\s|$)") 

Dim sl As List(Of String) = New List(Of String) 

If b.Success Then 
    sl.Add(b.Value.ToUpper()) 

    Dim sMatch = b.NextMatch() 

    While sMatch IsNot Nothing AndAlso sMatch.Success 
     sl.Add(sMatch.Value.ToUpper()) 
     sMatch = sMatch.NextMatch() 
    End While 
End If 

이 사이트의 다른 게시물마다 다음을 시도했지만 결과를 저장하지 않습니다. sl.ToString()이 값이 아닌 형식을 반환하기 때문에 용의자가 있습니까?

Dim Results = From v In _RulesAndTheirDescriptions _ 
Where v.Value.ToString().ToUpper().Contains(sl.ToString()) _ 
Order By v.Key _ 
Select New With {.Rule = v.Key, .Description = v.Value.ToString()} 

이 모든 것이 잘못 될 경우 제발 저를 계몽하십시오. 그것이 쉬워야하는 것처럼 보입니다. 사전에

감사합니다, 케빈

답변

0

안녕하세요 당신은 십자가가 하나 개 이상의 토큰이 rule.So 당신이 할 수있는 일치 할 때 중복을 생성 할 수

Dim Results = From v In _RulesAndTheirDescriptions _ 
join y in sl on 1 equals 1 
Where v.Value.ToString().ToUpper().Contains(y) _ 
Order By v.Key _ 
Select New With {.Rule = v.Key, .Description = v.Value.ToString()} 

이 문제를 해결하기 위해 합류해야 조 : 당신은 고유 값

Like Results.Distinct() 
+1

가 작동 할 수처럼 소리,하지만 두 번째 줄을 원하는 경우 별개을 1에서 1과 동일 함 1 '같음'연산자의 양쪽에서 하나 이상의 범위 변수를 참조해야합니다. 범위 변수 'v'는 '같음'연산자의 한쪽에 나타나야하고 범위 변수 'y'는 다른 변수에 나타나야합니다. – Grandizer

+0

봇은 나를 위해 작품을 좋아 - 나는 다음과 같은 작품 클래스 프로그램 { 정적 무효 메인 (문자열 []에 인수) { 목록 X = 새로운 목록 () { "AA를 .NET 3.5 .FOR 예를 사용하고 있습니다 ","BB ","CC "}; 목록 y = 새 목록 () {1, 2, 3}; var z = a에서 x로 결합 y에서 1을 1로 선택 선택 new {X = a, Y = b}; foreach (var u in z) Console.WriteLine ("{0} {1}", u.X, u.와이); } 을 제공합니다 AA 1 AA 2 AA 3 BB 1 BB 2 BB 3 CC 1 CC 2 CC 3 } – josephj1989

+1

버전 중 하나에 "적절한"값을 주장해도 OK 당신은 이것을 극복 할 수 있습니다. 양쪽에서 같은 값을 가짂 무언가를 사용하면이 값을 극복 할 수 있습니다. GetType()은 다음과 같습니다. var z = a에서 x에 y를 결합하십시오 .GetType()은 b.GetType()과 같습니다. X = a, Y = b}; – josephj1989

관련 문제