[英]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。
我需要在兩個值之間生成產品並生成一個包含結果的新列表,嚴重的代碼如下:
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.