2011-03-18 4 views
0

을 포함,이 문은 마지막 이름 -예기치 않은 동작이 사람들의 쿼리 방법

var results = repository.GetQuery().Where(p => p.Names 
            .Select(n=> n.LastName) 
            .Contains("And"); 

그것은 어떤 결과를 반환하지 않습니다에있는 "그리고"결과의 수를 반환해야합니다. 변경된 경우 -

var results = repository.GetQuery().Where(p => p.Names 
            .Select(n=> n.LastName) 
            .Contains("Anderson"); 

성을 가진 모든 사람들에게 앤더슨을 제공합니다.

분명히 Like 대신 Like라고 변환됩니다. 또한 우리는이 모든 사람을 반환합니다 "그리고"어느 곳이 성에서, 불행하게도 그것은 단지 사람의 첫 번째 LASTNAME을 확인

var results = repository.GetQuery().Where(p => p.Names 
            .Select(n=> n.LastName) 
            .FirstOrDefault() 
            .Contains("And"); 

을 BE-하도록 수정했습니다.

var results = repository.GetQuery().Where(p => p.Names 
            .Any(n=> n.LastName 
            .Contains("And")); 

제대로 작동하지만 원하는대로 사용할 수 없습니다.

+0

마지막 쿼리 만 올바른 것이므로 사용 방법을 설명해야합니다. –

+0

afaik가 LINQ to Entities에서 지원되지 않는 * 전체 텍스트 검색을 원할 경우 상점 쿼리를 사용하여 직접 롤백해야합니다. – BrokenGlass

+0

우리는 동적 쿼리를 작성하고 있으며 모두 Where 메서드 내에 포함되어 있습니다. 동적 쿼리는 1. Property, 2. ComparisonOperator (==, <=, Contains 등) 3. Value로 구성됩니다. 그런 다음 여러 검색 표현식에 대한 명령문/메소드의 위치를 ​​연결합니다. 그래서 우리는 Where 메소드에 모든 것을 적합하게하려고 노력합니다. 그래서 우리는 적절히 파싱 될 수 있습니다. –

답변

0

너무 오래이 동적 검색 문제에 노력하고 ... 내가 나무를 통해 숲을 볼 수 있습니다 : 그것은 몇 가지 도움이 될 것 같은

이 보인다.

완벽하게 일치하는 결과 만 반환하는 IEnumerable.Contains 메서드이기 때문에 작동하지 않습니다.

var results = repository.GetQuery().Where(p => p.Names 
            .Select(n=> n.LastName) 
            .Contains("And"); 

이 방법은 String.Contains 메서드를 사용하기 때문에 효과가 있습니다.

var results = repository.GetQuery().Where(p => p.Names 
            .Any(n=> n.LastName 
            .Contains("And")); 

두 개의 서로 다른 포함 방법입니다. 마지막으로 동적 검색을 수행합니다.

0

이 작업을 수행하려고하는 것 같습니다 :

Select * 
From Names 
Where LastName like 'And%' 

.Contains() 메소드는 정확히 일치와 함께 작동합니다. Linq를 사용하여 SQL을 찾고 정확한 SQL을 지정할 수는 있지만 저장 프로 시저를 사용하면 더 좋을 것입니다. LINQ to SQL and wildcard searches

관련 문제