2017-10-09 9 views
0

EF 코어를 사용하여 데이터베이스를 쿼리하고 있으며 리포지토리 클래스에서 이와 같은 여러 쿼리를 사용하여 필터로 전달 된 값을 기준으로 결과를 필터링합니다.필터링 논리가있는 링크 쿼리를 재사용 가능한 방법으로 리팩터링하는 방법

 if (!string.IsNullOrEmpty(queryObj.JobBoard)) 
      query = query.Where(j => j.JobBoard.JobBoardName.Contains(queryObj.JobBoard)); 

     if (!string.IsNullOrEmpty(queryObj.Division)) 
      query = query.Where(j => j.Division.Contains(queryObj.Division)); 

     if (!string.IsNullOrEmpty(queryObj.City)) 
      query = query.Where(j => j.City.Contains(queryObj.City)); 

     if (!string.IsNullOrEmpty(queryObj.State)) 
      query = query.Where(j => j.State.StateName.Contains(queryObj.State)); 

내가 재사용 할 수있는 방법을 구현할 수 있도록 모든 필드에 대해이 작업을 반복하지 않아도됩니까? (정확히 12 개의 필드가 있습니다).

답변

0

글쎄,이 경우에는 모든 경우에 1 차 객체에만 액세스하는 것이 아니기 때문에 나는 그렇게 생각하지 않습니다. 경우에 따라 이러한 객체의 속성을 확인하고 있습니다.

0

시험해보세요. 다른 모든 속성을 & & 연산자와 함께 포함하십시오.

query = query.Where(j => 
      string.IsNullOrEmpty(queryObj.JobBoard) ? true : j.JobBoard.JobBoardName.Contains(queryObj.JobBoard) 
      && string.IsNullOrEmpty(queryObj.Division) ? true : j.Division.Contains(queryObj.Division) 
      && string.IsNullOrEmpty(queryObj.City) ? true : j.City.Contains(queryObj.City) 
      && string.IsNullOrEmpty(queryObj.State) ? true : j.State.StateName.Contains(queryObj.State) 
      );