簡體   English   中英

c#LINQ LIST鍵,結果視圖,獲取值

[英]c# LINQ LIST Key, Results view, get values

我開始使用C#和LINQ,我認為一個列表來過濾一個按日期重復數據並通過ToList()創建List的數據庫。

 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();

我想訪問列表中的值。

如果我使用breackpoint,我可以看到:

-       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] {Valor = 29}
  • [1] {Valor = 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,我按日期對數據進行分組,然后我必須計算兩個數據的產品的日期。

在分組之前我有:

date1 Valor = 29,ID1

date1 Valor = 24,ID2

date2 Valor = 24,ID1

date2 Valor = 23,ID2

分組后,我失去了IDxx,這不是問題

date1 Valor = 29,Valor = 24

date2 Valor = 25,Valor = 23

數據按日期分組

我需要計算值是同一個變量的位置,它們是記錄中的不同字段

+[0]    { Valor = 29 }  <Anonymous Type>
+[1]    { Valor = 24 }  <Anonymous Type>

date1 Valor * Valor(29 * 24)

date2 Valor * Valor(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++;
             }

假設您的課程如下:

 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 });

您可以使用此代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM