2017-03-08 132 views
0

下面得到組總和我列出了一個linq查詢,在我的asp.net.mvc網絡應用程序中正常工作。
此外,我想組'allowance.ParameterId'以獲得'allowance.Freight(而不是多個記錄的給定密鑰)的組總和。如何在我的複雜LINQ查詢

  var query = from ara in aras 
        join company in companies on ara.Id equals company.ARAId 
        join wasteWater in wasteWaters on company.Id equals wasteWater.CompanyId 
        join allowance in allowances on wasteWater.Id equals allowance.WasteWaterID 
        join parameter in parameters on allowance.ParameterId equals parameter.Id into JoinedParameterAllowance 
        from parameter in JoinedParameterAllowance.DefaultIfEmpty() 

        where company.Activ == true && company.End == null && company.Template == false 
        && wasteWater.End == null 

        select new FreightSummaryViewModel 
        { 
         AraName = ara.Name, 
         AraId = ara.Id, 
         AllowedParameter = parameter.Name, 
         AllowedFreight = allowance.Freight 
        }; 

我試圖插入'group ...',但沒有弄清楚。 有人可以幫我設置正確的語法嗎? 謝謝你在前進,馬努

回答

1

我對數據庫中的關係知之甚少,所以我即興...

// Some dummy data to play with 
var aras  = Enumerable.Range(0, 5).Select(i => new { Id = i, Name = "Ara" + i }); 
var companies = Enumerable.Range(0, 15).Select(i => new { Id = i, ARAId = i % 5, Activ = true, End = (DateTime?)null, Template = false }); 
var wasteWaters = Enumerable.Range(0, 35).Select(i => new { Id = i, CompanyId = i/15, End = (DateTime?)null }); 
var allowances = Enumerable.Range(0, 70).Select(i => new { Id = i, WasteWaterID = i, ParameterId = i % 4, Freight = i * 1000 }); 
var parameters = Enumerable.Range(0, 4).Select(i => new { Id = i, Name = "Parameter" + i }); 

而這就是我相信你看了:

var query = 
    from ara in aras 
     join company in companies on ara.Id    equals company.ARAId 
     join wasteWater in wasteWaters on company.Id   equals wasteWater.CompanyId 
     join allowance in allowances on wasteWater.Id   equals allowance.WasteWaterID 
     join parameter in parameters on allowance.ParameterId equals parameter.Id 
      into JoinedParameterAllowance 
// from parameter in JoinedParameterAllowance.DefaultIfEmpty() 

    where true 
     && company.Activ == true 
     && company.End  == null 
     && company.Template == false 
     && wasteWater.End == null 

    group allowance by new 
    { 
     AraName  = ara.Name, 
     AraId  = ara.Id, 
     ParameterId = allowance.ParameterId 
    } into myGroup 

    select new //FreightSummaryViewModel 
    { 
     AraName   = myGroup.Key.AraName, 
     AraId   = myGroup.Key.AraId, 
     AllowedParameter = myGroup.Key.ParameterId, 
     AllowedFreight = myGroup.Sum(g => g.Freight) 
    }; 
+0

完善!非常感謝你!! – Manu