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= 所做的那样,用单独的测试替换它]