2017-03-08 12 views
0
以下

私は適切に私のasp.net.mvc Webアプリケーションで動作するlinqクエリを記載している。
さらに、allowance.Freight(指定されたキーの複数のレコードではなく)のグループ合計を取得するために、 'allowance.ParameterId'をグループ化したいと思います。私の複雑な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

関連する問題