在LINQ where子句的动态形成(Dynamic formation of where clau

2019-10-16 22:57发布

我需要在LINQ帮助。 这里是我的方案。 我有两个表用于存储如姓名,身份证,工资,Primary_Emp和年度员工详细信息。 用户可以从任一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。 注: -用户有两个选项,选择EmpIDEmpName从DDL和输入在文本框中的值(自由文本)

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是强制性的!

Answer 1:

如果只是要有条件申请单独过滤表达式,你可以做到以下几点:

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

你可以简单地保持堆放在那里有条件子句这样。



文章来源: Dynamic formation of where clause in LINQ