2015-07-03 127 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 ...我寫了只是爲了理解 –

相關問題