帮助我
我有这堂课:
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;
}
和此语句:
List<CLASS_list_dati_esport_CATASTO> list_dati_esport_CATASTO = Carica_list_dati_CATASTO();
((Carica_list_data_CATASTO()是一个在list_data_esport_CATASTO中添加元素的函数。
我想提取list_data_esport_CATASTO和项目'Media_est'中的所有元素,我想根据字段id_vertice分配项目'est'的平均值。
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());
}
但是
from sottoelemento in list_dati_esport_CATASTO group sottoelemento by sottoelemento.Id_vertice into raggruppamento select new { Media_nord = raggruppamento.Average(p => p.est)}
绝对是错误的。
Linq是一个查询,它是一个读取操作,并且尝试同时读取和写入平均值均不起作用。尝试下面的代码
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;
}
}
您可以按IdVertice
分组数据,计算平均值Est
并将其放入字典中。
var list = new List<Model>
{
new Model { IdVertice = 1, MediaEst = 30.0, Est = 15.0 },
new Model { IdVertice = 1, MediaEst = 20.0, Est = 10.0 },
new Model { IdVertice = 2, MediaEst = 35.0, Est = 25.0 },
new Model { IdVertice = 2, MediaEst = 30.0, Est = 17.0 },
new Model { IdVertice = 2, MediaEst = 31.0, Est = 15.0 }
};
var dict =
(from el in list
group el by el.IdVertice into gr
select gr).ToDictionary(k => k.Key, v => v.Average(x => x.Est));
然后通过Est
键从该词典中为每个元素提取一个值(即IdVertice
的平均值:
foreach (var el in list)
{
el.MediaEst = dict.TryGetValue(el.IdVertice, out double value) ? value : el.MediaEst;
}