如何使用LINQ将给定数据转换为IEnumerable对象

时间:2013-04-18 06:05:40

标签: linq c#-4.0

我在c#4中有以下代码,我正在尝试使用linq进行排序,分组。

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&gt;'到'System.Collections.Generic.IEnumerable'。存在显式转换(您是否错过了演员?)

1 个答案:

答案 0 :(得分: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)
    {
        ...
    }
}