groupby时不能隐式转换类型

时间:2014-02-21 10:36:27

标签: c# linq

当我尝试使用CellID进行分组时出现此错误。

  

无法隐式转换类型'System.Collections.Generic.List   System.Linq.IGrouping int,p2pControllerLogAnalyser.Models.GSMData'to   “System.Collections.Generic.List   p2pControllerLogAnalyser.Models.GSMData'

public List<GSMData> GetCellID()
{
    return Gsmdata.GroupBy(x => x.CellID)
                  .ToList();
}

我做错了什么,如何解决?

3 个答案:

答案 0 :(得分:6)

如果你确实需要这样做,虽然我无法想象为什么,你需要使用SelectMany将每组可枚举变为一个列表:

public List<GSMData> GetCellID()
{
    return Gsmdata
        .GroupBy(x => x.CellID)
        .SelectMany(gr => gr)
        .ToList();
}

当然,这看起来就像您尝试将具有相同CellID的项目一起批处理,因此您可以随时轻松订购它:

public List<GSMData> GetCellID()
{
    return Gsmdata
        .OrderBy(x => x.CellID)
        .ToList();
}

<小时/> 根据您的评论,可以返回不同的CellID值:

return Gsmdata.Select(x => x.CellID).Distinct();

如果您希望返回ID和分组数据的计数,可以将其捆绑为匿名类型:

return Gsmdata
    .GroupBy(x => x.CellID)
    .Select(gr => new { CellID = gr.Key, Count = gr.Count() });

虽然如果你从一个方法返回这个,我会做一个可发现的类型,而不是使用匿名类型。

答案 1 :(得分:0)

问题是GroupBy返回一个分组集合,在本例中为System.Collections.Generic.List<System.Linq.IGrouping<int, p2pControllerLogAnalyser.Models.GSMData>>。您的方法返回List<GSMData>

为了解决这个问题,您需要调整方法声明和/或Linq查询,以便类型匹配。

根据您的评论,我了解您要返回不同单元格ID的列表。您可以通过更改方法声明和Linq查询来实现此目的(我假设CellID的类型为int,基于IGrouping中的类型):

public List<int> GetCellID()
{
    return Gsmdata.Select(x => x.CellID)
                  .Distinct().ToList();
}

答案 2 :(得分:0)

如果我理解你需要这样的东西

var result = (from gdata in Gsmdata
              group gdata by gbata.CellID into g
              select new Result{
                  CellID = g.Key,
                  Meters = g.Sum(i=>i.Meter)
              }
             ).ToList();

其中Result

public class Result{
    public /*type your CellID */ CellID;
    public /*type your Meter */  Meters;
}