Help me
I have this class:
public class CLASS_list_dati_esport_CATASTO
{
public Int64 Id_vertice;
public string Denominazione;
public string Materializzazione;
public string Escluso;
public string Origine;
public string Stato;
public string Ordine_cat;
public string Ordine_roma40;
public string Relazione_bessell;
public string Relazione_roma40;
public string Posizione_da_cartografia;
public string Posizione_dai_registri;
public double Media_nord;
public double Nord;
public double Media_est;
public double Est;
public string Cord_fittizia;
public string Cord_esclusa;
}
And this statement:
List<CLASS_list_dati_esport_CATASTO> list_dati_esport_CATASTO = Carica_list_dati_CATASTO();
(Carica_list_data_CATASTO () is a function that adds elements in list_data_esport_CATASTO).
I would like to extract all the elements in the list_data_esport_CATASTO and in the item 'Media_est' i would like to assign the average of the item 'est' grouped according to the field id_vertice.
var query = from elemento in list_dati_esport_CATASTO
select new CLASS_list_dati_esport_CATASTO
{
Id_vertice = elemento.Id_vertice,
Denominazione =elemento.Denominazione,
Materializzazione= elemento.Materializzazione,
Escluso = elemento.Escluso,
Origine = elemento.Origine,
Stato = elemento.Stato,
Ordine_cat = elemento.Ordine_cat,
Ordine_roma40 = elemento.Ordine_roma40,
Relazione_bessell = elemento.Relazione_bessell,
Relazione_roma40 = elemento.Relazione_roma40,
Posizione_da_cartografia = elemento.Posizione_da_cartografia,
Posizione_dai_registri = elemento.Posizione_dai_registri,
Media_nord = elemento.Media_nord,
Nord = elemento.Nord,
Media_est = from sottoelemento in list_dati_esport_CATASTO group sottoelemento by sottoelemento.Id_vertice into raggruppamento select new { Media_nord = raggruppamento.Average(p => p.est)},
Est = elemento.Est,
Cord_fittizia = elemento.Cord_fittizia,
Cord_esclusa = elemento.Cord_esclusa
};
foreach (var item in query)
{
MessageBox.Show(item.Media_est.ToString());
}
but
from sottoelemento in list_dati_esport_CATASTO group sottoelemento by sottoelemento.Id_vertice into raggruppamento select new { Media_nord = raggruppamento.Average(p => p.est)}
is definitely wrong.
Linq is a query which is a read operation and trying to read and write average at same time doesn't work. Try code below
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<CLASS_list_dati_esport_CATASTO> list_dati_esport_CATASTO = new List<CLASS_list_dati_esport_CATASTO>();
var query = list_dati_esport_CATASTO
.GroupBy(x => x.Id_vertice)
.Select(x => new { esport_CATASTO = x.First(), average = x.Average(y => y.Est) })
.ToList();
foreach (var item in query)
{
item.esport_CATASTO.Est = item.average;
}
List<CLASS_list_dati_esport_CATASTO> results = query.Select(x => x.esport_CATASTO).ToList();
}
}
public class CLASS_list_dati_esport_CATASTO
{
public Int64 Id_vertice;
public string Denominazione;
public string Materializzazione;
public string Escluso;
public string Origine;
public string Stato;
public string Ordine_cat;
public string Ordine_roma40;
public string Relazione_bessell;
public string Relazione_roma40;
public string Posizione_da_cartografia;
public string Posizione_dai_registri;
public double Media_nord;
public double Nord;
public double Media_est;
public double Est;
public string Cord_fittizia;
public string Cord_esclusa;
}
}