当我尝试使用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();
}
我做错了什么,如何解决?
答案 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;
}