SQL 查询 LINQ(对我来说很复杂)
SQL query to LINQ (complex for me)
我是 LINQ 的新手,我做过简单的查询,但是我在这个问题上遇到了困难。有人可以帮我把它转换成 LINQ 吗?将 table 加入自身并统计记录让我挂了。
SELECT DISTINCT
RegionID = O.Region,
Region = R.Office,
OfficeCount = (SELECT
COUNT(officeID)
FROM OFfice
WHERE Region = O.region
AND Type IN (5, 6)
AND ClosedProduction = 0
AND OfficeID NOT IN (10, 135, 151)
AND (OfficeID IN (SELECT DISTINCT
OfficeID
FROM WR_Data_Work
WHERE PhaseID IS NOT NULL)
OR OfficeID = 154))
FROM office O
JOIN Office R
ON O.Region = R.OfficeID
JOIN Employee VP
ON R.VicePresID = VP.EmployeeID
WHERE O.OfficeID NOT IN (10, 135, 151)
AND O.Type IN (5, 6)
AND O.ClosedProduction = 0
AND (O.OfficeID IN (SELECT DISTINCT
OfficeID
FROM WR_Data_Work
WHERE PhaseID IS NOT NULL)
OR O.OfficeID = 154)
ORDER BY RegionID
OfficeID OfficeName Region
88 Office 1 90
90 Office 2 90
96 Office 3 90
86 Office 4 93
91 Office 5 93
92 Office 6 93
93 Office 7 93
95 Office 8 93
在这种情况下,办公室 2 是办公室 1 和办公室 3 的区域办公室,但办公室 7 是办公室 4、5、6 和 8 的区域办公室。
这是我的尝试,没有任何能力测试:
var PhaseOffices = (from w in WR_Data_Work where w.PhaseID != null select w.OfficeID).Distinct();
var TargetOffices = from O in Office
where (O.Type == 5 || O.Type == 6) && O.ClosedProduction == 0 &&
(!(new[] { 10, 135, 151 }).Contains(O.OfficeID)) && (PhaseOffices.Contains(O.OfficeID) || O.OfficeID == 154)
select O;
var res = (from O in TargetOffices
join R in Office on O.Region equals R.OfficeID
//join VP in Employee on R.VicePresID equals VP.EmployeeID = not needed?
orderby O.Region
select new {
RegionID = O.Region,
Region = R.Office,
OfficeCount = (from ofc in TargetOffices
where ofc.Region == O.Region
select ofc.OfficeID).Count()
}).Distinct();
一些 LINQ 提供程序不会处理我使用的本地数组 Contains
,在这种情况下,您必须像我对 Type
.[=13= 所做的那样,用单独的测试替换它]
我是 LINQ 的新手,我做过简单的查询,但是我在这个问题上遇到了困难。有人可以帮我把它转换成 LINQ 吗?将 table 加入自身并统计记录让我挂了。
SELECT DISTINCT
RegionID = O.Region,
Region = R.Office,
OfficeCount = (SELECT
COUNT(officeID)
FROM OFfice
WHERE Region = O.region
AND Type IN (5, 6)
AND ClosedProduction = 0
AND OfficeID NOT IN (10, 135, 151)
AND (OfficeID IN (SELECT DISTINCT
OfficeID
FROM WR_Data_Work
WHERE PhaseID IS NOT NULL)
OR OfficeID = 154))
FROM office O
JOIN Office R
ON O.Region = R.OfficeID
JOIN Employee VP
ON R.VicePresID = VP.EmployeeID
WHERE O.OfficeID NOT IN (10, 135, 151)
AND O.Type IN (5, 6)
AND O.ClosedProduction = 0
AND (O.OfficeID IN (SELECT DISTINCT
OfficeID
FROM WR_Data_Work
WHERE PhaseID IS NOT NULL)
OR O.OfficeID = 154)
ORDER BY RegionID
OfficeID OfficeName Region 88 Office 1 90 90 Office 2 90 96 Office 3 90 86 Office 4 93 91 Office 5 93 92 Office 6 93 93 Office 7 93 95 Office 8 93
在这种情况下,办公室 2 是办公室 1 和办公室 3 的区域办公室,但办公室 7 是办公室 4、5、6 和 8 的区域办公室。
这是我的尝试,没有任何能力测试:
var PhaseOffices = (from w in WR_Data_Work where w.PhaseID != null select w.OfficeID).Distinct();
var TargetOffices = from O in Office
where (O.Type == 5 || O.Type == 6) && O.ClosedProduction == 0 &&
(!(new[] { 10, 135, 151 }).Contains(O.OfficeID)) && (PhaseOffices.Contains(O.OfficeID) || O.OfficeID == 154)
select O;
var res = (from O in TargetOffices
join R in Office on O.Region equals R.OfficeID
//join VP in Employee on R.VicePresID equals VP.EmployeeID = not needed?
orderby O.Region
select new {
RegionID = O.Region,
Region = R.Office,
OfficeCount = (from ofc in TargetOffices
where ofc.Region == O.Region
select ofc.OfficeID).Count()
}).Distinct();
一些 LINQ 提供程序不会处理我使用的本地数组 Contains
,在这种情况下,您必须像我对 Type
.[=13= 所做的那样,用单独的测试替换它]