2017-06-14 32 views
0

我有這個SQL查詢下面,我試圖寫linq,不知道如何處理總和,分組,按順序。任何幫助,將不勝感激。將sql查詢轉換爲linq與總和

SELECT e.POL, SUM(e.EMS), f.FACID, d.DISN, f.FNAME, f.FCITY 
FROM FAC f 
INNER JOIN DISTRICT d on f.DIS = d.DIS 
INNER JOIN EMS e on f.FACID = e.FACID 
WHERE f.FACID = 12345 
group by e.POL, f.FACID, d.DISN, f.FNAME, f.FCITY 
order by e.POL, f.FACID, d.DISN, f.FNAME, f.FCITY 

這是我到目前爲止有:

     var emissions = from f in db.FAC 
             join d in db.DISTRICTs on f.DIS equals d.DIS 
             join e in db.EMS on f.FACID equals e.FACID 
             where f.FACID == facility.FACID 
             select new 
             { 
              Pollutant = e.POL, 
              Emissions = 
              FacilityId = f.FACID, 
              DistrictName = d.DISN, 
              FacilityName = f.FNAME, 
              FacilityCity = f.FCITY 
             }; 

回答

0

確保您的導航屬性設置,則:

var emissions = db.FAC 
    .Where(x=>x.FACID==12345) 
    .OrderBy(x=>x.DISTRICT.POL) 
    .ThenBy(x=>x.FACID) 
    .ThenBy(x=>x.DISTRICT.DISN) 
    .ThenBy(x=>x.FNAME) 
    .ThenBy(x=>x.FCITY) 
    .Select(x=> new { 
    Pollutant = x.DISTRICT.POL, 
    Emissions = x.EMSs.Sum(), 
    FacilityId = x.FACID, 
    DistrictName = x.DISTRICT.DISN, 
    FacilityName = x.FNAME, 
    FacilityCity = x.FCITY 
    }); 
+0

如何設置導航屬性? – arbo

+0

https://msdn.microsoft.com/en-us/library/jj713564(v=vs.113).aspx(實體數據模型)或https://msdn.microsoft.com/en-us/library/jj679962 (v = vs.113).aspx(Code First)或http://download.oracle.com/oll/obe/EntityFrameworkOBE/EntityFrameworkOBE.htm(Oracle特定) –

0

try代碼:

var result=(from f in db.FAC 
      join d in db.DISTRICT on f.DIS equals d.DIS 
      join e in EMS on F.FACID equlas e.FACID 
      Where F.FACID=12345 
      group new {f,d,e} by new {e.POL,f.FACID,d.DISN,f.FNAME,f.FCITY} into jj 
      select new { 
         POL= jj.FirstOrDefault().e.POL, 
         SUMEMS= jj.ToList().Sum(c => c.e.EMS), 
         FACID= jj.FirstOrDefault().f.FACID, 
         DISN= jj.FirstOrDefault().d.DISN, 
         FNAME=jj.FirstOrDefault().f.FNAME, 
         FCITY=jj.FirstOrDefault().f.FCITY 
         }).OrderBy(c=>c.POL).ThenBy(c=>c.FACID).ThenBy(c=>c.DISN) 
          .ThenBy(c=>c.FNAME).ThenBy(c=>c.FCITY).ToList();