2012-07-04 95 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和輸入值來選擇EmpIDEmpName

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,則不應考慮名稱,反之亦然。

JOIN在LINQ是強制性的!

回答

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(); 

你可以簡單地保持堆疊其中條款有條件這樣。