C# 使用子查询将sql查询转换为linq
我有一个包含3个子查询的SQL查询。我需要将查询转换为linq。我试过一些方法,但答案是错误的。你能帮个忙吗 我的SQL查询如下所示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
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进行复制的尝试吗?