![](/img/trans.png)
[英]LINQ Group by on multiple tables with nested group by with join and aggregate
[英]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.