2011-01-03 1 views
3

간단한 간단한 검색을 함께 진행했습니다.여러 키워드를 기반으로 쿼리하는 동적 linq-to-SQL

IEnumerable<Member> searchResults = (from m in members 
            where m.ScreenName.ToUpper().Contains(upperKeyword) 
            select m).AsEnumerable(); 

사용자가 "keyword1 keyword2"를 입력하면이 작은 쿼리가 항상 정확한 문자열을 검색합니다. 따라서 키워드를 분할해야한다고 결정했습니다.

string[] keywords = upperKeyword.split(' '); 

그런 다음 문제가 발생했습니다. 난 정말이 작업을 수행 할 수 없습니다 배열을지지 않습니다

IEnumerable<Member> searchResults = (from m in members 
            where m.ScreenName.ToUpper().Contains(keywords) // array of string 
            select m).AsEnumerable(); 

.Contains() 때문이다. 내가 어떻게 이걸 이룰 수 있니?

답변

2

이 (안된) 시도 이 메모리 내에서 수행해야합니다.

+0

어 ... 이건 정말 유망 해 보인다. 결국에는')'를 덧붙이면된다. 지금 이것을 테스트하십시오. – quakkels

+0

@quakkels - 네가 그 트릭을해야하는데, 유일한 문제는 실제로 모든 것을 메모리로 끌어 와서 필터링하는 대신에 데이터의 일치하는 행을 실제로 끌어 올리는 더 효율적인 솔루션이 있다는 것입니다. – Keith

+0

ToList()를 사용하지 않아도됩니다. 직접 테이블을 참조하고 비교할 수 있어야합니다. 그러나 +1은 값 목록의 부분 일치에 가장 적합한 솔루션입니다. –

0

배열을 목록으로 변환해야한다고 생각합니다. 나는 사무실로 나가고있다.하지만 나는 이것이 효과가 있다고 생각한다.

IEnumerable<Member> searchResults = (from m in members 
            where keywords.ToList().Contains(m.ScreenName.ToUpper()) // array of string 
            select m).AsEnumerable(); 
+0

제안 해 주셔서 감사합니다. '.Contains()'는'string'이나'char'만을 받아 들일 것입니다. – quakkels

+0

@quakkels - 죄송합니다. 제가 잘못 생각한 것 같습니다. 나는 내 대답을 편집했다. –

1

에 대한 정확한 일치 :

당신이 무엇을의 역보십시오 : 참고로 where keywords.Contains(m.ScreenName)

부분 일치하는 Creating IN queries with LINQ-to-SQL

:

string[] keywords = new[]{ ... }; 
var results = db.members.Where(m => keywords.Any(sn => m.ScreenName.Contains(sn))); 

여기에는 컴파일 오류가 없지만 테스트 할 데이터가 없습니다. 내가 LINQ는 SQL로 위의 변환 할 수있을 것입니다 생각하지 않는 한,

IEnumerable<Member> searchResults = members.ToList().Where(m => keywords.Any(k => m.Summary.Contains(k))) 

편집

추가 .ToList(), 그래서 우리 :

+0

링크를 제공해 주셔서 감사합니다 ... 불행히도 쿼리 순서를 바꾸면 논리적으로 작동하지 않습니다. 'keywords'는'ScreenName'의 일부가 될 수있는 단어를 포함합니다. 그러므로,'keywords'는 ​​결코'ScreenName'을 포함하지 않을 것입니다. 내가 잘못? – quakkels

+0

@quakkels : 정확합니다. 목록과 정확히 일치해야합니다. –

+0

감사합니다. 그 필요성이 생기면 나는 대답을 찾을 수있는 곳을 알게 될 것이다 :-) – quakkels

관련 문제