[英]convert SQL query with multiple join on multiple tables using group by on multiple columns and with aggregate function into LINQ
Please help me to convert below query into LINQ syntax. 请帮助我将以下查询转换为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
I have tried with the following syntax but doesn't work 我尝试使用以下语法,但不起作用
(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();
in your grouping remove ar.Pincode 在您的分组中删除ar.Pincode
group ar
by new
{
ar.AreaID,
ar.AreaName,
***ar.Pincode***
} into uag
Try Code: 尝试代码:
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();
Try this syntax , 试试这个语法,
(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.