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 回答