2010-01-18 18 views
0

LINQ-newb在使用分組時遇到問題。我試圖查詢一個名爲doseWithHighestScore的IEnumerable。在LINQ查詢中未識別的組方法

我下面這個例子: http://msdn.microsoft.com/en-us/vcsharp/aa336747.aspx#minGrouped

這裏是我的代碼:

var doseWithLowestVolumeForForm = 
     from d in dosesWithHighestScore 
     group d by d.formulation.form into g     
     select new { 
      Form = g.Key, 
      LowDose = g.Group.Min(d => d.doseAdministrableAmount) 
     }; 

使用 「集團」 是導致此錯誤:

'System.Linq.IGrouping'不包含'Group'的定義,並且沒有可以找到接受類型'System.Linq.IGrouping'的第一個參數的擴展方法'Group'(您是否缺少using指令或程序集引用?)

這裏是我的usings:

using System; 
using System.Text; 
using System.Linq; 
using System.Xml.Linq; 
using System.Collections.Generic; 
using System.Collections; 

爲什麼會出現這個錯誤?

回答

3

您可以在中刪除條款,即LowDose。在LINQ-to-objects中,一個組本身就是一個IEnumerable<>,所以你可以應用其他的LINQ操作而不需要任何額外的限定符。在IGrouping上提供Key屬性,以便您可以訪問該組的值...以及分組。

var doseWithLowestVolumeForForm = 
     from d in dosesWithHighestScore 
     group d by d.formulation.form into g     
     select new { 
      Form = g.Key, 
      LowDose = g.Min(d => d.doseAdministrableAmount) 
     }; 

網站上顯示使用Group屬性的示例不正確。

+0

編譯 - 謝謝!所以,還有一個後續問題:我如何訪問結果?我以爲我可以做些像doseWithLowestVolumeForForm [0] .Form的東西,但這不起作用。 – Marvin 2010-01-18 04:07:23

+0

LINQ語句的結果是查詢對象...不是數組。有不同的方式來訪問結果 - 取決於你想要對他們做什麼。常用的方法是使用'foreach'循環來評估每個結果;如下所示:'foreach(doseWithLowestVolumeForForm中的var item){...}'。或者,如果您只對第一個結果感興趣,則可以執行:'doseWithLowestVolumeForForm.First()',它將返回查詢中的第一個結果。其他選擇也存在......但是,這又取決於你需要怎樣處理結果。 – LBushkin 2010-01-18 04:33:09

相關問題