2013-04-18 43 views
1

我在c#4中有以下代碼,我嘗試使用linq進行排序,分組。如何將給定的數據轉換爲使用LINQ的IEnumerable對象

IList<Component> components = Component.OrganizationalItem.OrganizationalItem.Components(true); 
IEnumerable<Component> baggage = components.Where(x => x.IsBasedOnSchema(Constants.Schemas.BaggageAllowance.ToString())) 
              .OrderBy(x => x.ComponentValue("name").StringValue("Code")) 
              .GroupBy(x => x.ComponentValue("name").StringValue("Code")); 

在上面的例子,當我試圖使用GroupBy它給錯誤,請參閱以下內容:

錯誤1無法隱式轉換類型「System.Collections.Generic.IEnumerable>」到「系統.Collections.Generic.IEnumerable」。一個顯式轉換存在(是否缺少強制轉換?)

+1

「這是給錯誤」 是*永不*足夠的細節。你應該總是給編譯器錯誤,或者異常等等。 – 2013-04-18 06:07:56

回答

2

GroupBy的結果將是一個IGrouping<string, Component> - 這是組組件,而不是組件的一個序列的序列。這就是分組的重點。因此,這應該是罰款:

IEnumerable<IGrouping<string, Component>> baggage = ... query as before ...; 

或者只是使用隱式類型:

var baggage = ...; 

然後,您可以遍歷組:

foreach (var group in baggage) 
{ 
    Console.WriteLine("Key: {0}", group.Key); 
    foreach (var component in group) 
    { 
     ... 
    } 
} 
+0

在使用IGrouping之後給出下面的錯誤錯誤不能隱式轉換類型'System.Collections.Generic.IEnumerable >'改爲'System.Linq.IGrouping '。一個明確的轉換存在(你是否缺少一個轉換?) 相反,如果使用「var」它工作正常,如果你想使用IGrouping 2013-04-18 06:22:36

+0

改變你的'baggage'聲明爲'IEnumerable > baggage',或使用'var'代替:'var baggage =(...)' – MarcinJuraszek 2013-04-18 06:56:10

+0

@MarcinJuraszek:哎呦,固定感謝:) – 2013-04-18 07:08:08

相關問題