2017-03-08 137 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