2015-07-03 78 views
1

我有一个LINQ查询,我需要将两个字段添加为group by子句。虽然我可以轻松地将多个列字段进行分组,但是当其中一个字段是计算字段时会出现问题。我似乎无法能够让我的头围绕如何在这种情况下LINQ中GroupBy子句中的多个字段(其中一个是计算字段)

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子句具有计算出的费率字段已经存在。该代码看起来像这样在VS编辑

Code Window showing the LINQ Query

回答

2

所以只是把它作为你在注释掉的代码:

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

谢谢一堆。这工作得很好 – Asif

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

+0

感谢您的回答。你的解决方案也有效,但涉及创建一个ExpiryDate1冗余变量,我们可以直接参考该领域,如接受的答案 – Asif

+0

所示ya我们不需要创建该变量,我们可以直接分配ExpiryDate ...我写了只是为了理解 –

相关问题