【发布时间】:2016-08-10 08:15:30
【问题描述】:
我是 LinQ 的新手,几周前开始使用它。所以也许我对 LinQ 的工作原理有错误的理解。我还尝试使用此处所述的空构造函数:Invoke constructor inside a linq query
我更改了一个类的构造函数。我添加了实体energyType
public CSVMeter(int meterID, DateTime datum, int numberOfValues, double total, double total2, double qualityScore, int energyType)
{
this.MeterID = meterID;
this.Datum = datum;
this.NumberOfValues = numberOfValues;
this.total = total;
this.total2 = total2;
this.qualityScore = qualityScore;
this.energyType = energyType;
}
我有以下 LinQ 查询。
public List<CSVMeter> getDisctinctMeters(List<CSVMeter> meterList)
{
newMeterList = newMeterList.GroupBy(x => new { x.MeterID, x.Datum })
.Select(x => new CSVMeter(
x.Key.MeterID,
x.Key.Datum,
x.Sum(s => s.NumberOfValues),
x.Sum(s => s.total),
x.Sum(s => s.total2),
0,
x.energyType))
.ToList();
return meterList;
}
但我在x.energyType 收到以下错误
错误 2“System.Linq.IGrouping”不包含“energyType”的定义,并且找不到接受“System.Linq.IGrouping”类型的第一个参数的扩展方法“energyType”(您是否缺少使用指令还是程序集参考?) c:\users\rudi\documents\visual studio 2013\projects\plooscassandra\plooscassandra\handlers\meterbuilder.cs 108 136 PloosCassandra
为什么我找不到x.energyType?
【问题讨论】:
-
因为最后一个
x不是单个CsvMeter,而是一个IGrouping<CsvMeter>,您的匿名类型({MeterID, Datum}) 为Key,代表CsvMeter的序列。energyType将是您在Sum调用中使用的s的属性。 -
这个对象的定义是什么
newMeterList -
您正在对数据进行分组,因此 energyType 不以标量字段的形式存在,而是以列表的形式存在(如 NumberOfValues 和总计)。
-
@RenéVogt @ema 但是
energyType不是我想要添加的东西。它是我得到的固定值。我不能使用x.Avarage,因为它返回一个双精度值并且它是一个整数。 -
@Proliges 看到我的回答。这个值有多“固定”?如果所有人都一样,您可以使用我的
First()方法。如果它是完全不变的,那么CsvMeter中的实例属性可能根本就是一个错误的存储位置。
标签: c# entity-framework linq