2017-02-20 1 views
1

leaIdseaId이 0보다 큰 경우 다음 메서드는 데이터를 반환합니다.값이 0보다 큰 경우 LINQ에 "&&"연산자가 포함됩니다.

leaId 만 입력하면 어떻게 데이터를 반환하도록 쿼리를 변경해야합니까?

연산자로 인해 seaId은 선택 사항이며 0과 같으므로 아무 것도 반환되지 않습니다. 두 조각의 쿼리

public IQueryable<Stand> GetStand(int leaId, int seaId = 0) 
{ 
    return from c in db.Stands where c.LeaID == leaId && c.SeaID == seaId 
      select new Stand 
      { 
        //something 
      } 
} 
+1

'경우 (seaId == 0) 반환과 같은 c.LEadID가 == leadId 다른 <현재 쿼리>' –

답변

5

분할 :

IQueryable<Stand> query=db.Stands.Where(c= c.LeaID == leaId); 

if(seaId>0) 
{ 
    query=query.Where(c= c.SeaID == seaId); 
} 
return query.Select(e=>...); 

또 다른 중요한 것은 당신이 개체 유형 (Stand)를 사용하여 쿼리를 투사하지 않아야합니다. EF에서는 익명의 유형이나 DTO를 사용하여 프로젝트를 진행할 수 있습니다. 사용자 정의 클래스를 사용하여 투영하는 경우이 마지막 주석을 무시하십시오.

+0

실제로 반환 형식을 수정할 수 있습니다 "스탠드"는 맞춤 클래스입니다. 나를 귀찮게하는 것은 두 가지 쿼리를 수행해야한다는 것입니다. (중요한 점은 API 끝점입니다) :) – OrElse

+1

@OrElse, 두 개의 쿼리를 실행하지 않고 결과를 구체화 할 때 실행될 쿼리를 작성합니다 (예 : ToList를 호출). 또는 iterating 이상 – octavioccl

0

당신은 당신의 방법 db.Stands에서 C에서

public IQueryable<Stand> GetStand(int leaId, int seaId = 0) 
    { 
     return from c in db.Stands where (c.LeaID == leaId) ||(seaId>0 && c.SeaID == seaId) 
       select new Stand 
       { 
         //something 
       } 
    } 
+0

안녕하세요, 그것은 간단한 또는 – OrElse

관련 문제