0

私はLinqの初心者で、MS SQLクエリで非常に簡単な問題を解決する方法がわかりません。

Select e.EmployeeID
, e.EmployeeName
, e.Division
, e.DepartmentCode
, e.DesignationGrpCode
Into #temp
from chr.dbo.EMPLOYEE e
Where e.DepartmentCode in ( 
                        Select DepartmentCode 
                        from chr.dbo.EMPLOYEE 
                        where EmployeeID = 'S-1287'
                        )

Select * from #temp t
where t.EmployeeID in (
                        Case When t.Division <> 'CHR' Then (Select EmployeeID from #temp where DesignationGrpCode = 'CorpDMGR')
                        Else (Select EmployeeID from #temp where DesignationGrpCode = 'MGT') End)
Drop table #temp

このクエリを Linq に変換するにはどうすればよいですか? お願いします

これが私のlinqステートメントです

var employee = new Common().Employee();

        var jobdesc = new Common().JobHistory();

        List<EMPLOYEE> dCode = (from e in employee
                              where e.EmployeeID == "S-1204"
                              select new EMPLOYEE
                              {
                                  DepartmentCode = e.DepartmentCode
                              }).ToList();

        List<EMPLOYEE> emp = (from e in employee
           join d in dCode on e.DepartmentCode equals d.DepartmentCode into temp
           from t in temp.DefaultIfEmpty()


           orderby e.EmployeeName
           select new EMPLOYEE
           {
               EmployeeID = e.EmployeeID,
               EmployeeName = e.EmployeeName
           }).ToList();

しかし、CASE ELSEステートメントをチェックする方法を知らない

4

2 に答える 2

1

極端な場合、次のようにできます。

using (var context = new ConnectDb())    
    {
         context.ExecuteStoreCommand("your query");
         // for exaple: context.ExecuteStoreCommand("TRUNCATE TABLE Peoples"); 
         context.SaveChanges();
    }
于 2013-06-04T08:50:04.953 に答える
1

これを試してみてください。これはideoneでコンパイルおよび実行されますが、それ以外はテストされていないため、頑張ってください。

var temp = from e in context.EMPLOYEE
           where (from f in context.EMPLOYEE
                  where f.EmployeeID == "S-1287"
                  && e.DepartmentCode == f.DepartmentCode
                  select f).Any()
           select e;

var result = from t in temp
             where (from u in temp
                    where u.DesignationGrpCode
                          == (t.Division == "CHR" ? "CorpDMGR" : "MGT")
                    && t.EmployeeID == u.EmployeeID
                    select u).Any()
             select t;

SQL Server 2005 以降を指していると仮定すると、LINQ が一時テーブルを WITH 句に変換するのに十分なほどスマートであることを期待しています。

更新:tempのサブクエリはほぼ確実に単一の値を返すため、(EmployeeID が主キーであると仮定して) それを分離する必要があります。

string deptForS1287 = (from e in context.EMPLOYEE
                       where e.EmployeeID == "S-1287"
                       select DepartmentCode).Single();

var temp = from e in context.EMPLOYEE
           where e.DepartmentCode == deptForS1287
           select e;

⋮

これには、EMPLOYEE テーブルに従業員 S-1287 が記載されていない場合に例外をスローするという副次的な利点があります。

于 2013-06-04T08:53:45.860 に答える