LINQ:以 3 种方式加入计数用户

LINQ: Count Users in 3 way join

我在使用 LINQ to SQL 时遇到了问题,我认为应该不会太难。 在 SQL 中,我有一个 BusinessUnits,它分为 OrgUnits,而 Users 属于一个 OrgUnit。 我想打印 BusinessUnitID 和每个用户的数量。

在SQL中大概是这样的:

SELECT BusinessUnitID, Count(u.UserID)
FROM BusinessUnitsOrgUnits bu
     INNER JOIN OrgUnits org on bu.OrgUnitID= org.OrgUnitID
     INNER JOIN Users u on org.OrgUnitID = u.OrgUnitID
GROUP BY BusinessUnitID

但是在 LINQ 中我得到了这个,但是很难得到正确的计数。

 var UsersPerBU = from bu in BusinessUnitsOrgUnits 
                  join org in OrgUnits on bu.OrgUnitID equals org.OrgUnitID
                  join u in Users on org.OrgUnitID equals u.OrgUnitID
                  group bu by bu.BusinessUnitID into g
                  select new
                   {
                        BusinessUnitID = g.Key,
                        UserCount = Users.Count (us => us.OrgUnit.OrgUnitID == bu.OrgUnitID) 
                         //here it complains that bu does not exist.
                   };
var UsersPerBU = from bu in BusinessUnitsOrgUnits 
                  join org in OrgUnits on bu.OrgUnitID equals org.OrgUnitID
                  join u in Users on org.OrgUnitID equals u.OrgUnitID
                  group bu by bu.BusinessUnitID into g
                  select new
                   {
                        BusinessUnitID = g.Key,
                        UserCount = g.Count()
                   };

也许这个

            var UsersPerBU = (from bu in BusinessUnitsOrgUnits
                              join org in OrgUnits on bu.OrgUnitID equals org.OrgUnitID
                              join u in Users on org.OrgUnitID equals u.OrgUnitID
                              group bu by bu.BusinessUnitID into g
                              select new { bu = g})
                             .Select(x =>
                                 new
                                 {

                                     BusinessUnitID = x,
                                     UserCount = x.bu.Select(y  => y.OrgUnitID).Distinct().Count()
                                     //here it complains that bu does not exist
                                 }
                            );