通过linq

时间:2018-04-03 08:02:37

标签: c# linq

我正在试图弄清楚如何从我的查询中选择最后两个“交易”。

我的查询看起来像这样

var summary= (from tType in _context.CommandCentre.TransactionTypes
    join tSummary in _context.CommandCentre.TransSummary on tType.Id equals tSummary.TransactionType
    where tSummary.ChargeFlag.ToLower() == ChargeFlag.Overcharge.ToString().ToLower()
    group tSummary by new { tType.Name, tSummary.NumberOfTransactions, tSummary.PeriodDate }
    into gResult
    select new
    {
        Fee = gResult.Key.Name,
        TransactionCount = gResult.Key.NumberOfTransactions,
        Period = gResult.Key.PeriodDate,
        ActualAmount = gResult.Sum(x => x.ActualAmount),
    }).OrderByDescending(x=>x.Period);

现在如果我做Take(2)我只获得最后两个记录,而我想获得我选择的每个“费用”的最后两个记录。基本上每个“费用”的两个记录按“期间”日期排序。

不确定如何在单个查询中执行此操作。

1 个答案:

答案 0 :(得分:3)

试试这个:

var result = summary.GroupBy(p => p.Fee)
                    .SelectMany(d => d.OrderBy(r => r.Period).Take(2))
                    .ToList();