2013-05-08 3 views
3

MVC3 프로젝트에서 일하고 있습니다. 나는 잠시 브라우징을하고 몇 가지 예제를 시도했지만 작동시키지 못했습니다.WHERE IN 절

OrderForm 테이블에서 DeptID이 이미있는 다른 목록에있는 레코드 목록을 가져와야합니다.

내가이 분명 컨트롤러, 나의 방법이다 Contains()IN SQL 절을 대체하지만 읽을 수있는 모든 예제는 같은 방법으로

.Where(ListOfDepartments.Contains(q.DeptID)) 

에서이 일을 사용할 필요가 있음을 알고 있어요 작동하지 않습니다.

public ActionResult ValidOrders(string installation, string orderpriority, string stockclass, string validity) 
{ 
    int instID = System.Convert.ToInt32(installation); 
    int orderpriorityID = System.Convert.ToInt32(orderpriority); 
    int stockclassID = System.Convert.ToInt32(stockclass); 
    string period = validity; 

    try 
    { 
     var departments = dba.Department 
          .Where (a => a.InstID == instID); 

     var valid = dba.OrderForm 
      .Where(q => q.FormType == 3 
       && q.FormStatus == 2 
       && q.OrderPriority.OrderPriorityID == orderpriorityID 
       && q.StockClassID == stockclassID 
       && departments.Contains(q.DeptID));    

     return View(valid.ToList()); 
    } 
    catch (Exception) 
    { 
     return View("Error"); 
    } 
} 

내가 잘못 했나요?

+0

예외가 발생 했습니까? –

+0

'Department'에 가입해야합니다. –

+0

부서 질의 끝 부분에'Select'를 추가하고'DeptID'를 비교할 ID 만 검색해야한다고 생각합니다. – juharr

답변

5

Department이 아닌 int의 목록이 필요합니다.

var departments = dba.Department 
          .Where (a => a.InstID == instID) 
          .Select(d => d.Id);//Id is a guess, it maybe another property name 
          //.ToList(); 
+2

'ToList'를 끝내면 두 개의 DB 대신 하나의 쿼리가 실행되지 않을까요? – juharr

+0

고맙습니다. @ RaphaëlAlthaus !! 이제 완벽하게 작동하고 있습니다. 나는'.ToList()'로 시도했으나하지 않았다. 두 옵션 모두 작동합니다. – equisde

+0

@equisde, ToList() 피드백에 감사드립니다. –