2014-04-29 7 views
0

특정 직원에 대한 검색에 대한 쿼리를 작성하지만, 내 쿼리에는 오류가 있지만 지금은 어디에서 발생했는지 알 수 있습니다. 회사에 2 개의 테이블이 있고 직원 정보에 대해 2 개의 테이블이 있습니다. 진행은 다음과 같습니다 부서 번호 및 회사 번호로 회사 테이블에asp.net의 내부 조인 쿼리 MVC4

  • 1'st 쿼리 검색 후 PK_companyID를 얻을.
  • 2'ed JOIN 회사. PK_companyID==employee.FK_companyID.
  • 3'ed 쿼리는 이름이 employee table에 동일하게 입력되면 직원 테이블에서 FK_companyID으로 검색합니다.

나는 그것의 명확한 사전에

var query = (from c in db.Company 
      where c.departmentNO== departmentNumber && c.companyNo==companyNumber 
      join x in db.Employee c.PK_companyID==x.FK_companyID 
      where (x.FirstName.Contains(firstName ?? x.FirstName) 
      && x.SecondName.Contains(secondName ?? x.SecondName) 
      && x.ThirdName.Contains(thirdName ?? x.ThirdName) 
      && x.FourthName.Contains(fourthName ?? x.FourthName)) 
      select x).ToList(); 

감사를 이해할 수 있도록 노력하겠습니다.

+0

EF6을 사용하는 경우 sql 쿼리를 출력 창에 로깅하고 발행 된 쿼리와 비교하여 논리를 확인하십시오. – dotNETbeginner

답변

0

당신은 당신의 쿼리 및 모든 필터를 사용하지 않는 경우도 많이 청소기 SQL을 초래한다, 그런 다음 코드를 사용하여 필터링을 간소화 할 수 있습니다.

var query = (from c in db.Company           
      join x in db.Employee c.PK_companyID equals x.FK_companyID 
     where c.departmentNO == departmentNumber && c.companyNo == companyNumber 
     ....... 

희망이 작동합니다 : 당신은 키워드를 사용해야합니다

var employees = (from c in db.Company 
      join e in db.Employee on c.PK_companyID equals e.FK_companyID 
      where c.departmentNO == departmentNumber && c.companyNo == companyNumber 
      select e); 

if (!String.IsNullOrEmpty(firstName)) 
    employees = employees.Where(pr => pr.FirstName.Contains(firstName)); 

if (!String.IsNullOrEmpty(secondName)) 
    employees = employees.Where(pr => pr.SecondName.Contains(secondName)); 

if (!String.IsNullOrEmpty(thirdName)) 
    employees = employees.Where(pr => pr.ThirdName.Contains(thirdName)); 

if (!String.IsNullOrEmpty(thirdName)) 
    employees = employees.Where(pr => pr.FourthName.Contains(fourthName)); 

return employees.ToList(); 
0
var query = (from c in db.Company           
      join x in db.Employee c.PK_companyID == x.FK_companyID 
     where c.departmentNO == departmentNumber && c.companyNo == companyNumber 
      && (x.FirstName.Contains(firstName ?? x.FirstName) 
          && x.SecondName.Contains(secondName ?? x.SecondName) 
          && x.ThirdName.Contains(thirdName ?? x.ThirdName) 
          && x.FourthName.Contains(fourthName ?? x.FourthName)) 

      select x).ToList(); 
+0

위의 코드로 확인하십시오. – Mukund

+0

하지만 4 가지 이름을 모두 쓰는 것은 필수 사항이 아닙니다. 사용자가 입력하지 않고 4 개의 입력란을 모두 입력하도록 입력란을 허용하는 방법. 나는 '||' 이름 중 하나가 성명처럼 입력되지 않은 모든 결과를 허용합니다. – user3509742

0

는 대신 "=="에서 다음과 같이 가입 "동일".