2012-07-04 2 views
1

LINQ에서 도움이 필요합니다. 여기에 내 시나리오가있다. 이름, ID, 급여, Primary_Emp 및 Year와 같은 직원 세부 정보를 저장하기위한 두 개의 테이블이 있습니다. 사용자는 DDL에서 이름 또는 ID를 선택하고 입력 값을 SP로 전달할 수 있습니다. SQL Server는 주어진 입력을 기반으로 데이터를 반환합니다.LINQ에서 where 절을 동적으로 형성

tbl_Employee 
EmpID EmpName  Salary Primary_Emp 
1  xxx   10000 Yes 
2  yyy   20000 Yes 
3  zzz   30000 Yes 

tbl_Year 
EmpID [Year] 
1  2010 
2  2011 
3  2011 

다음은 내 SQLQuery입니다. LINQ에서 동일한 조건을 적용하려고했습니다. 참고 : - 사용자가 텍스트 상자 (무료 텍스트)에서 DDL 입력 값에서 EmpID 또는 EmpName을 선택하는 두 가지 옵션

Input Parameters: 
Name varchar(100) 
EmpID varchar(100) 

select distinct e.EmpID from 
tbl_employee e 
inner join 
tbl_Year y 
on e.EmpID = y.EmpID 
where E.Primary_Emp = 'Yes' 
**AND e.EmpName = (SELECT CASE WHEN @Key = 'Name' THEN @Value ELSE e.Empname END) 
    AND e.EmpID = (SELECT CASE WHEN @Key = 'EmpID' THEN @Value ELSE e.EmpID END)** 

을 가지고 질문 : LINQ의 동적 절을 형성하는 방법에 대해 설명합니다. 여기서 문제는 LHS도 역동적이라는 것입니다. 사용자가 EmpID를 통과하면 이름과 그 반대를 고려하지 않아야합니다.

linq의 JOIN은 필수 항목입니다. 그냥 당신이 조건에 적용 할 별도의 필터 식의 경우

답변

2

, 당신은 다음 작업을 수행 할 수 있습니다 :

var query = from e in dbcontext.tbl_employee 
      join y in tbl_Year 
      on e.EmpID equals y.EmpID 
      where e.Primary_Emp = "Yes" 
      select e; 

if (key == "EmpName") 
    query = from e in query where e.EmpName = value select e; 
else if (key == "EmpID") 
    query = from e in query where e.EmpID = value select e; 

var result = (from e in query 
       select e.EmpID).Distinct(); 

당신은 단순히 조항이 조건이 방법을 스태킹 유지할 수 있습니다.

관련 문제