我需要LINQ的帮助。这是我的情景。我有两个表用于存储员工详细信息,如姓名,ID,薪水,Primary_Emp和Year。用户可以从DDL中选择名称或ID,并将输入值传递给SP。 SQL Server将根据给定的输入返回数据。
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中形成动态 where 子句。这里的问题是LHS也是动态的。如果用户传递EmpID,则不应考虑名称,反之亦然。
在linq中加入是强制性的!
答案 0 :(得分: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();
您可以通过这种方式有条件地继续堆叠 where 子句。