2014-02-05 3 views
0

Linq to SQL 쿼리와 관련하여 질문이 있습니다.linq to sql 쿼리

나는 다음과 같은 상황이 : 내가를 검색하는 쿼리를 실행해야이 옵션의

나는 등의 위치, 가용성, 이름, 언어 등 많은 옵션과 검색을

...

을 선택 옵션에 따라 결과, 내가 어떻게 최선을 할 수있는, 나는 각 가능성과 옵션의 조합과 같은 linq 쿼리를 작성할 수 없습니다,하지만 그 중 하나에 대해 쓸 수 없어 작동하지 않을 것입니다 :

이 경우 avai를 상상해보십시오. lability는 선택되지 않았으므로 검색해서는 안되지만,이 경우에는 false로 전달되거나 location이 설정되지 않고 null 인 경우 공백 위치 만 검색하므로 모든 것을 필요로합니다.

제 궁금한 점은 사람들이 이러한 종류의 동작을 쿼리로 처리하는 방법에 있습니다.

답변

2

linq 쿼리를 즉시 실행하지 않는 한 where 절을 추가 할 수 있습니다. 당신은 예를 들어,이 작업을 수행 할 수 있습니다

var query = from p in context.people; 
if(searchOnLocation) 
{ 
    query = query.where(p => p.location == model.location); 
} 
if(otherSearch) 
{ 
    query = query.where(p => p.someOtherProperty == someotherValue); 
} 

var result = query.ToList(); 

만큼 당신이 당신 된 IQueryable에 ToList()를 호출하지 마십시오 LINQ는 SQL로 번역되지 않습니다. 그것은 LINQ 번역하고 데이터베이스에 대해 실행됩니다, 마지막 호출의

1
IQueryable<Person> query = context.people; 
if(model.location != null) 
    query = query.Where(x => x.location == model.location); 
if(model.availability != null) 
    query = query.Where(x => x.availability == model.availability); 
// etc 

기본적으로 점점 더 많은 제약을 설정할 수 있습니다.

0

당신이 쿼리를 구현하려면 조건은 다음 구문을 사용할 수있는 것보다 경우없는 :

var query = context.people. 
       where(p => p.location == (model.location ?? p.location) 
          && p.availability == (model.availability ?? p.availability)) 
       .ToList();