在多个表上使用group by并将聚合函数转换为LINQ,在多个表上转换SQL查询

时间:2017-06-30 05:19:40

标签: c# asp.net-mvc entity-framework linq sql-server-2008

请帮我将以下查询转换为LINQ语法。

select am.areaid, am.AreaName, MAX(am.pincode),count(ua.ApartmentID) from areamaster am 
inner join MerchantServiceAreas msa on am.areaid = msa.areaid
left join apartmentmaster apm on am.areaid = apm.areaid
left join useraddress ua on apm.apartmentid = ua.apartmentid
group by am.areaid,am.areaname

我尝试使用以下语法但不起作用

(from ar in Entities.AreaMasters
    join mrs in Entities.MerchantServiceAreas on ar.AreaID equals mrs.AreaID

    join ap in Entities.ApartmentMasters on mrs.AreaID equals ap.AreaID into apl
    from ap1 in apl.DefaultIfEmpty()

    join ua in Entities.UserAddresses on ap1.ApartmentID equals ua.ApartmentID into ual
    from ua1 in ual.DefaultIfEmpty()

    where mrs.MerchantID == MerchantID
    group ar 
    by new
    {
      ar.AreaID,
      ar.AreaName,
      ar.Pincode
    } into uag
    select new AreaComplex
    {
      AreaID = uag.Key.AreaID,
      AreaName = uag.Key.AreaName,
    }).ToList();

3 个答案:

答案 0 :(得分:0)

分组中的

删除ar.Pincode

   group ar 
    by new
    {
      ar.AreaID,
      ar.AreaName,
      ***ar.Pincode***
    } into uag

答案 1 :(得分:0)

尝试代码:

var result=  (from ar in Entities.AreaMasters
join mrs in Entities.MerchantServiceAreas on ar.AreaID equals mrs.AreaID

join ap in Entities.ApartmentMasters on mrs.AreaID equals ap.AreaID into apl
from ap1 in apl.DefaultIfEmpty()

join ua in Entities.UserAddresses on ap1.ApartmentID equals ua.ApartmentID into ual
from ua1 in ual.DefaultIfEmpty()

where mrs.MerchantID == MerchantID
group new { ar,mrs,ap1,ua1 }
by new
{
  ar.AreaID,
  ar.AreaName      
} into uag
select new AreaComplex
{
  AreaID = uag.FirstOrDefault().ar.AreaID,
  AreaName = uag.FirstOrDefault().ar.AreaName,
  Pincode=  uag.Max(c=>c.ar.pincode),
  Pincode=  uag.Count(c=>c.ua1.ApartmentID),
}).ToList();

答案 2 :(得分:0)

试试这个语法,

ContentChild
相关问题