LINQ 中 GroupBy 子句中的多个字段(其中一个是计算字段)

Multiple fields in GroupBy clause in LINQ (where one is computed field)

我有一个 LINQ 查询,我需要在该查询上添加两个字段作为 group by 子句。虽然我可以轻松地使用尽可能多的列字段进行分组,但是当其中一个字段是计算字段时就会出现问题。在这种情况下,我似乎无法理解如何添加第二个属性

var values = intermediateValues
            //.GroupBy(x => new {x.Rate, x.ExpiryDate })
            .GroupBy(r => new { Rate = ((int)(r.Rate / BucketSize)) * BucketSize })
            .Select(y => new FXOptionScatterplotValue
            {
                Volume = y.Sum(z => z.TransactionType == "TERMINATION" ? -z.Volume : z.Volume),
                Rate = y.Key.Rate,
                ExpiryDate = y.Key.ExpiryDate,
                Count = y.Count()
            }).ToArray();

在上面的代码示例中,我想将 ExpiryDate 添加到我现有的 GroupBy 子句中,该子句已经有一个 Rate 的计算字段。代码在 VS 编辑器中看起来像这样

因此,只需将其包含在注释掉的代码中即可:

.GroupBy(r => new { Rate = ((int)(r.Rate / BucketSize)) * BucketSize,
                    r.ExpiryDate })

这可能对您有所帮助

var values = intermediateValues
            //.GroupBy(x => new {x.Rate, x.ExpiryDate })
            .GroupBy(r => new { Rate = ((int)(r.Rate / BucketSize) ) * BucketSize,ExpiryDate1 = r.ExpiryDate })
            .Select(y => new FXOptionScatterplotValue
            {
                Volume = y.Sum(z => z.TransactionType == "TERMINATION" ? -z.Volume : z.Volume),
                Rate = y.Key.Rate,
                ExpiryDate = y.Key.ExpiryDate1,
                Count = y.Count()
            }).ToArray();

只需将 ExpiryDate1 用作匿名类型并将其用作键名....