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

时间:2015-07-03 10:08:31

标签: c# linq grouping

我有一个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编辑器中看起来像这样

Code Window showing the LINQ Query

2 个答案:

答案 0 :(得分:2)

所以只需在注释掉的代码中包含它:

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

答案 1 :(得分:0)

这可能对您有所帮助

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作为匿名类型,并将其用作键名....