【发布时间】:2015-02-28 15:22:35
【问题描述】:
我开始使用C#和LINQ,我想用一个列表来过滤一个按日期重复数据的数据库并创建一个List,通过ToList()。
List<Registro> datosCalcA = new List<Registro>();
MonitoreoEntities _context = new MonitoreoEntities();
datosCalcA= _context.Registroes.Where(a => a.PuntoDeMedicionId == pPuntoDeMedicionId
&& a.EntradaSalidaId == _operadorA
|| a.EntradaSalidaId == _operadorB
&& a.FechaHoraRegistro <= _fechaHoraFinal
&& a.FechaHoraRegistro >= _fechaHoraInicial).OrderBy(i => i.FechaHoraRegistro).ToList();
var newList = datosCalcA.GroupBy(i => i.FechaHoraRegistro, x => new {Valor = x.Valor}).ToList();
我想访问列表中的值。
如果我使用断点,我可以看到:
- newList[0] {System.Linq.Lookup<System.DateTime,<>f__AnonymousType0<decimal>>.Grouping} System.Linq.IGrouping<System.DateTime,<>f__AnonymousType0<decimal>> {System.Linq.Lookup<System.DateTime,<>f__AnonymousType0<decimal>>.Grouping}
+ [System.Linq.Lookup<System.DateTime,<>f__AnonymousType0<decimal>>.Grouping] {System.Linq.Lookup<System.DateTime,<>f__AnonymousType0<decimal>>.Grouping} System.Linq.Lookup<System.DateTime,<>f__AnonymousType0<decimal>>.Grouping
+ Key {05/12/2014 01:52:07 p.m.} System.DateTime
- Results View Expanding the Results View will enumerate the IEnumerable
+ [0] { Valor = 29 } <Anonymous Type>
+ [1] { Valor = 24 } <Anonymous Type>
我已读取值 0 和 1。
- [0] { 勇气 = 29 }
- [1] { 勇气 = 24 }
我需要在两个值之间进行乘积,并生成一个带有结果的新列表,严重的代码为:
var newList = datosCalcA.GroupBy(i => i.FechaHoraRegistro, x => new {Valor = x.Valor}).ToList();
for (int i = 0; i < newList.Count; i++) // Loop with for.
{
var datos = newList[i].First().Valor[0,i]*newList[i].First().Valor[1,i];
}
使用 GroupBy,我将数据按日期分组,然后我必须为两个数据的乘积计算一个日期。
在分组之前我有:
日期1 勇气=29, ID1
日期1 勇气=24, ID2
日期2 勇气=24, ID1
日期2 勇气=23, ID2
分组后,我失去了IDxx,这不是什么问题
日期1 勇气=29, 勇气=24
日期2 勇气=25, 勇气=23
数据按日期分组
我需要计算哪里的值是同一个变量,它们是记录中的不同字段
+[0] { Valor = 29 } <Anonymous Type>
+[1] { Valor = 24 } <Anonymous Type>
日期1 勇气 * 勇气 (29*24)
日期2 勇气 * 勇气 (24*23)
如果代码正确,则不是,这是我认为可以解决的方法之一。
我可以解决。
作为另一个列表中的列表,我为每个主要项目创建一个辅助列表,我取它们在每个项目中的值:
var newList = datosCalcA.GroupBy(i => i.FechaHoraRegistro, x => new {x.Valor}).ToList();
yy = 0;
foreach (var _datosCalculado in newList)
{
var valorW = newList[yy].ToList(); //auxiliary list to take values (Valor)
try
{
decimal resultado = valorW[0].Valor / valorW[1].Valor;// Take data in pos [0] and [1] in auxiliary list
}
catch (DivideByZeroException e) //divide by zero error
{
decimal resultado = 0;
}
yy++;
}
【问题讨论】:
-
不清楚你想做什么?您能否提供具有预期输出的示例数据。您正在使用
FechaHoraRegistro作为键和Valor作为比较创建组,如果您需要遍历每个组,您可以使用键在组中循环然后进行计算.
标签: c# linq entity-framework