2012-11-01 4 views
1

이름으로 Employee 컬렉션을 검색해야하는이 메서드가 있습니다. 나는 찾고자하는 성의 배열을 전달하고,이 메서드는 Employees에 이러한 이름을 반환합니다. 단순한. 내가 부분 라스트 네임의 배열을 전달하고, 그 성과 이름 부분 성과 이름과 일치하는 모든 종업원을 얻을 수 있도록다음과 같은 방법으로 내 방법을 변경할 수 있습니까?

public IQueryable<Employee> GetEmployees(IEnumerable<string> lastNames) 
    { 
     var query = Employees.Where(e => lastNames.Contains(e.LastName)); 
     return query; 
    } 

는 지금은 방법을 변경해야합니다.

public IQueryable<Employee> GetEmployees(IEnumerable<string> partialLastNames) 
    { 
     // the code above will not work 
    } 

나는이 이름을 가진 직원이 있다면 그래서 : 시고니 위버, Amanada 비버, 존 스미스, 제인 슨

내가 partialLastName의 arary 통과를 [ "단언", "수학"], 그것은 것 저에게 Sigourney Weaver, Amanada Beaver, Jane Matheson과 같은 쿼리를 보내주십시오.

어떻게 할 수 있습니까?

감사합니다.

답변

2

은 당신이 찾고있는 당신이 일치 혼합 된 경우에 대해 걱정할 필요가 없습니다이

public IQueryable<Employee> GetEmployees(IEnumerable<string> partialLastNames) 
{ 
     var query = Employees.Where(e => partialLastNames.Any(x => e.LastName.Contains(x))); 
     return query; 
} 
+0

찾고있는 것 같아? – kenny

+0

좋습니다! 대단히 감사합니다 !! 사실 원래 함수에서는 부분적인 Employee Number (digits)로 검색해야합니다. 그래서 나는 괜찮을거야. 감사. – monstro

+0

이 방법은 작동하지만 부분 길이의 특정 길이까지만 작동합니다. 대략 48-49 개의 배열 요소. 50 개의 문자열을 전달할 때 예외가 throw됩니다. SQL 문의 일부가 너무 깊게 중첩되어 있습니다. 쿼리를 다시 작성하거나 작은 쿼리로 나눕니다. SQL 쿼리를 각 문자열에 대해 UNION을 사용하여이 LINQ 식으로 만들고 SQL 쿼리의 최대 중첩 수준에 도달했기 때문에 나는 믿습니다. 다른 접근 방법이 필요합니다. – monstro

관련 문제