簡體   English   中英

C#Linq嵌套GroupBy和Sum

[英]C# Linq nested GroupBy and Sum

我正在嘗試翻譯過去幾天寫給Linq的查詢,但似乎無法使它工作。 這是我要翻譯的查詢:

SELECT
    hsd.CoveragePeriodBeginDate,
    RateTotal           = SUM(hsd.Rate),
    ReimbursementTotal  = SUM(hsd.TotalReimbursement),
    AdjustmentsTotal    = SUM(hsd.Adjustments)
FROM
    (   SELECT 
            CoveragePeriodBeginDate,
            PaidDate,
            Rate                = TotalClaimCharge, 
            TotalReimbursement  = ReimbursementAmount,
            Adjustments         = SUM(BaseRateChangeAmount)
        FROM
            dbo.HsdMonthlyCapitatation
        WHERE
            MemberID = 12345678
        GROUP BY
            CoveragePeriodBeginDate,
            PaidDate,
            TotalClaimCharge,
            ReimbursementAmount
    )   hsd 
GROUP BY
    hsd.CoveragePeriodBeginDate
ORDER BY 
    hsd.CoveragePeriodBeginDate

我需要做的就是將此翻譯成Linq。 我嘗試了許多不同的方法,但似乎無法使其正常工作。 它似乎總是聚集太多。

這是我最近來的。

var rawCapData = db.HsdMonthlyCapitations.Where(x => x.MemberID == memberID)
    .Select(x => new {
                        CoveragePeriod = x.CoveragePeriodBeginDate,
                        TotalCharge = x.TotalClaimCharge,
                        Reimbursement = x.ReimbursementAmount,
                        PaidDate = x.PaidDate,
                        Adjust = x.BaseRateChangeAmount
                    })
    .GroupBy(x => new {
                        CoverageDate = x.CoveragePeriod,
                        Paid = x.PaidDate,
                        Rate = x.TotalCharge,
                        Reimburse = x.Reimbursement
                      })
    .GroupBy(x => new {
                        Coverage = x.Key.CoverageDate,
                        DhsRate = x.Sum(y => y.TotalCharge),
                        ReimbursementTotal = x.Sum(y => y.Reimbursement),
                        Adjustments = x.Sum(y => y.Adjust)
                      })
    .Select(x => new {
                        CapMonthYear = x.Key.Coverage,
                        DhsRate = x.Key.DhsRate,
                        TotalReimbursement = x.Key.ReimbursementTotal,
                        AdjustmentsTotal = x.Key.Adjustments
                     });   

我應該說我已經開始使用它了,但是我覺得它很笨拙,並且混合了正則LINQ和lambda表達式,如果可能的話,我寧願使用lambda表達式對它們進行編碼。 這是我必須工作的代碼:

var rawCapitationData = from capitation
                        in db.HsdMonthlyCapitations
                        where capitation.MemberID == memberID
                        group capitation by new 
                             { 
                                capitation.CoveragePeriodBeginDate,
                                capitation.TotalClaimCharge,
                                capitation.ReimbursementAmount,
                                capitation.PaidDate
                             } into cap
                        select new {
                                      CapitationMonthYear = cap.Key.CoveragePeriodBeginDate,
                                      TotalReimbursement = cap.Key.TotalClaimCharge,
                                      DhsCapitationAmount = cap.Key.ReimbursementAmount,
                                      PaidDate = cap.Key.PaidDate,
                                      DhsAdjustments = cap.Sum(x => x.BaseRateChangeAmount)
                                   };

var capitationData = rawCapitationData.GroupBy(cap => cap.CapitationMonthYear)
      .Select(data => new {
                           CapitationDate = data.Key,
                           TotalReimbursement = data.Sum(x => x.TotalReimbursement),
                           DhsCapitationAmount = data.Sum(x => x.DhsCapitationAmount),
                           DhsAdjustments = data.Sum(x => x.DhsAdjustments)
                          });

我的偏好是一口氣做到這一切。 可能嗎 我覺得我對lambda表達式很了解,但是我知道我缺少一些東西。

任何幫助或建議,我們將不勝感激。

不知道您要達到什么目的,但是我最終得到了這一點:

return db.HsdMonthlyCapitations
    .Where(x => x.MemberID == memberID)
    .GroupBy(x => new {x.CoveragePeriodBeginDate, x.PaidDate, x.TotalClaimCharge, x.ReimbursementAmount})
    .Select(x => new
    {
        x.Key.CoveragePeriodBeginDate,
        x.Key.PaidDate,
        Rate = x.Key.TotalClaimCharge,
        TotalReimbursement = x.Key.ReimbursementAmount,
        Adjustments = x.Sum(m => m.BaseRateChangeAmount)
    })
    .GroupBy(x => x.CoveragePeriodBeginDate)
    .Select(x => new
    {
        CoveragePeriodBeginDate = x.Key,
        RateTotal = x.Sum(m => m.Rate),
        ReimbursementTotal = x.Sum(m => m.TotalReimbursement),
        AdjustmentsTotal = x.Sum(m => m.Adjustments),
    })
    .OrderBy(x => x.CoveragePeriodBeginDate);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM