Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用子查询将sql查询转换为linq_C#_Sql_Linq - Fatal编程技术网

C# 使用子查询将sql查询转换为linq

C# 使用子查询将sql查询转换为linq,c#,sql,linq,C#,Sql,Linq,我有一个包含3个子查询的SQL查询。我需要将查询转换为linq。我试过一些方法,但答案是错误的。你能帮个忙吗 我的SQL查询如下所示 SELECT COUNT(E.empregid) FROM Employee E WHERE E.CardNo IS NOT NULL AND E.CorporateId = '10' AND E.ReceivedDate < '07/01/2016' AND E.empregid NOT IN (SE

我有一个包含3个子查询的SQL查询。我需要将查询转换为linq。我试过一些方法,但答案是错误的。你能帮个忙吗

我的SQL查询如下所示

SELECT  
    COUNT(E.empregid)
FROM 
    Employee E
WHERE 
    E.CardNo IS NOT NULL
    AND E.CorporateId = '10'
    AND E.ReceivedDate < '07/01/2016'
    AND E.empregid NOT IN (SELECT empregid
                           FROM employee
                           WHERE Isinactivated = 1
                             AND DeletionDate < '07/01/2016')
                             AND E.EmpRegId NOT IN (SELECT S.empregid
                                                    FROM Filequeue q, EmpSalary S
                                                    WHERE q.uploadid = S.uploadid
                                                      AND S.CorporateId = '10'
                                                      AND S.RecordStatus = 'E'
                                                      AND S.ModifiedDate between '06/01/2016' AND '06/30/2016'
                                                      AND q.uploadid NOT IN 
                                                          (SELECT uploadid 
                                                           FROM Filequeue 
                                                           WHERE remarks LIKE 'New%' 
                                                             AND mode = 'C'))
我已经这样写了linq查询,但我认为它不是一个好的方法。有人能帮我用一个好的方法吗?我得到了预期的结果

(var Context = new Entities())
            {
                List<decimal> Details = (from E in Context.Employees
                                            where (
                                            E.CardNo != null && E.CorporateId == companyId.ToString() && E.ReceivedDate <= periodTo
                                            && !(from E2 in Context.Employees
                                                 where (E2.Isinactivated == true && E2.DeletionVerification <= periodTo)
                                                 select (E2.EmpRegId)).ToList().Contains(E.EmpRegId)
                                                 && !(from q in Context.FileQueues
                                                      from S in Context.EmpSalaries
                                                      where (
                                                        q.UploadId == S.UploadId &&
                                                        S.CorporateId == companyId.ToString() &&
                                                        S.RecordStatus == "E" &&
                                                        (S.Mode == "C" ||
                                                        S.Mode == "U") &&
                                                        S.ModifiedDate >= periodFrom && S.ModifiedDate <= periodTo
                                                        && !(from q1 in Context.FileQueues
                                                             where
                                                               q1.Remarks.StartsWith("New") &&
                                                               q1.Mode == "C"
                                                             select (
                                                               q1.UploadId
                                                             )).ToList().Contains(q.UploadId)
                                                        )
                                                      select
                                                      (
                                                          S.EmpRegId
                                                      )).ToList().Contains(E.EmpRegId)
                                            )
                                            select E.EmpRegId).ToList();
}

您不认为子查询存在不必要的嵌套吗?您可以展示您使用LINQ进行复制的尝试吗?您不认为子查询存在不必要的嵌套吗?您可以展示您使用LINQ进行复制的尝试吗?