簡體   English   中英

使用在多個列上使用group by和聚合函數將多個表上的多個聯接轉換為SQL查詢

[英]convert SQL query with multiple join on multiple tables using group by on multiple columns and with aggregate function into LINQ

請幫助我將以下查詢轉換為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();

在您的分組中刪除ar.Pincode

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

嘗試代碼:

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();

試試這個語法,

(from am in Entities.AreaMasters.GetQueryable()
 join msa in Entities.MerchantServiceAreas.GetQueryable()
.Where(a=> a.MerchantID == MerchantID) on am.AreaID equals msa.AreaID
join apm in Entities.ApartmentMasters.GetQueryable() on am.AreaID equals 
apm.AreaID into apmjoin from apmlj into apmjoin.DefaultIfEmpty()
join ua in Entities.UserAddresses.GetQueryable() on apmlj.ApartmentID equals 
ua.ApartmentID into uajoin from ualj in uajoin.DefaultIfEmpty()
select new { newAreaID = am.AreaID,newAreaName =  am.AreaName, newPincode= 
am.Pincode})
.GroupBy(a=> new {AreaID = a.newAreaID,AreaName = a.newAreaName,Pincode= 
a.newPincode})
.Select(x=> new AreaComplex { AreaID = x.FirstOrDefault().AreaID,
AreaName = x.FirstOrDefault().AreaName,Pincode = x.Sum(a=>a.Pincode) }).toList();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM