2012-10-31 4 views
1
char[] delimiter = new char[] {' '}; 

string[] names = name.Trim().Split(delimiter, StringSplitOptions.RemoveEmptyEntries); 

employees = (List<CMSUser>)employees.Where(
        e => 
         (e.FirstName.Contains(names[0]) && e.LastName.Contains(names[1])) || 
         (e.LastName.Contains(name[0]) && e.FirstName.Contains(name[1])) 
        ) 

위의 질문은 Linq lambda를 사용하여 직원 목록을 쿼리하려고합니다. 입력란에 입력 된 검색어를 공백 문자로 분리하여 공백으로 구분 된 두 검색어를 포함하는 직원 목록 (이름 & & 성) 또는 성 (성 & & 성)을 가져와야합니다.조건이있는 Linq 쿼리 (x && x) || (x & x)

내가 쿼리 조건에서 잘못하고있는 것을 알지 못합니다. 일치하는 조건을 제공하는 대신 모든 직원을 목록에 반환합니다.

+0

유용한 이름을 가진 변수는 유용합니다. –

답변

3

나는 문제가 두 번째 또는 절에서 일어나는 생각 :

(e.LastName.Contains(name[0]) && e.FirstName.Contains(name[1]) 

그것은하지 namenames해야한다, 그렇지 않으면 각각 name 변수의 제 1 및 제 2 문자를 가져옵니다.

+0

좋은 캐치 !!!!! – ivowiblo

+0

@ivowiblo 감사합니다! – rikitikitik

+0

@rikitikitik 대단히 감사합니다 !! – Krish

0

Where()에 의해 반환 된 IEnumerable을 캐스팅해서는 안됩니다. 대신 ToList()을 사용할 수 있습니다.

+0

@RiskyMartis 그렇습니다. 그 다음에 orderby와 take 및 ToList 다음에 코드를 작성했습니다. 그 점에 대해 고마워요 :) – Krish