1

LINQ のヘルプが必要です。これが私のシナリオです。名前、ID、給与、Primary_Emp、Year などの従業員の詳細を格納するための 2 つのテーブルがあります。ユーザーは、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 から選択するEmpIDEmpName、テキスト ボックスに値を入力するかの 2 つのオプションがあります (フリー テキスト)

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 での JOIN は必須です。

4

1 に答える 1

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句を単純に積み重ね続けることができます。

于 2012-07-04T21:50:10.233 に答える