【问题标题】:How to convert given data into IEnumerable object如何将给定数据转换为 IEnumerable 对象
【发布时间】:2013-04-11 03:14:50
【问题描述】:

我在 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 时出现错误,请参见下文:

无法将类型“System.Collections.Generic.IEnumerable&lt;System.Linq.IGrouping&lt;string,Tridion.ContentManager.ContentManagement.Component&gt;&gt;”隐式转换为“System.Collections.Generic.IEnumerable&lt;Tridion.ContentManager.ContentManagement.Component&gt;”。存在显式转换(您是否缺少演员表?)*

【问题讨论】:

  • “它给出了错误”是从来没有足够详细。您应该始终给出编译器错误或异常等。

标签: linq c#-4.0


【解决方案1】:

GroupBy 的结果将是一个IGrouping&lt;string, Component&gt; - 它是一系列 组件,而不是一个组件序列。这就是分组的全部意义所在。所以这应该没问题:

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)
    {
        ...
    }
}

【讨论】:

  • 使用 IGrouping 后出现以下错误 错误 1 ​​无法将类型 'System.Collections.Generic.IEnumerable>' 隐式转换为'System.Linq.IGrouping'。存在显式转换(您是否缺少演员表?)相反,如果使用“var”它可以正常工作,如果您想使用 IGrouping 我们应该做些什么
  • 将您的baggage 声明更改为IEnumerable&lt;IGrouping&lt;string, Component&gt;&gt; baggage,或改用varvar baggage = (...)
  • @Jon,感谢您的更新,您能否提出建议,因为我们可以使用 group.Key 读取密钥,现在我该如何读取该组的密钥值
  • 不明白你的意思——组的键值 group.Key.
  • @ManojSingh:不,我无法调查它,不知道你从哪里获取数据,而且信息很少。您是在正确情况下进行调查的人 - 您可以查看确切的堆栈跟踪、检查数据等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-24
  • 2013-07-04
  • 2012-06-02
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
相关资源
最近更新 更多