【问题标题】:c# LINQ LIST Key, Results view, get valuesc# LINQ LIST 键,结果视图,获取值
【发布时间】: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


【解决方案1】:

假设您的班级如下所示:

 public class myClass
 {
     public int Valor1;
     public int Valor2;
 }

现在你以某种方式列出了 myClass,可能是从 db 获取数据:

  List<myClass> myList = GetDataFromDatabase();  // Returns List<myClass>

现在您可以创建一个新的匿名类型,也可以像这样选择其他类型

 var stuff = myList.Select(x => new { Product = x.Valor1 * x.Valor2 });

【讨论】:

  • 我不使用类。我正在使用 EF 和过滤。用 EF 将代码添加到滤液的顶部
【解决方案2】:

您可以使用此代码

var ListProduct = from item in myList
select (item.Valor2 * item.Valor1);

【讨论】:

  • 错误 5 当前上下文中不存在名称 'x' D:\Proyecto telemetria\SystemaControl\Graficos.aspx.cs 142 61 SystemaControl 错误 4 'System.Linq.IGrouping' 不包含 'Valor2' 的定义,并且没有扩展方法 'Valor2' 接受类型为 'System.Linq.IGrouping' 的第一个参数(你是缺少 using 指令或程序集引用?) D​​:\Proyecto telemetria\SystemaControl\Graficos.aspx.cs 142 52 SystemaControl
  • 我按项目更改 x 出错了
  • 我们之前尝试过,错误:错误不包含“Valor1”的定义,并且没有扩展方法“Valor1”接受“System.Linq.IGrouping' 可以找到(您是否缺少 using 指令或程序集引用?) D​​:\Proyecto telemetria\SystemaControl\Graficos.aspx.cs 141 65 SystemaControl
猜你喜欢
  • 1970-01-01
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多