select 新的平均 linq
Average linq in select new
帮帮我
我有这个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;
}
并且这条语句:
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' 中的所有元素,我想分配根据字段 'est' 分组的项目的平均值 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());
}
但是
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));
然后通过IdVertice
key:
从字典中为每个元素拉出一个值(即Est
的平均值)
foreach (var el in list)
{
el.MediaEst = dict.TryGetValue(el.IdVertice, out double value) ? value : el.MediaEst;
}
帮帮我
我有这个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;
}
并且这条语句:
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' 中的所有元素,我想分配根据字段 'est' 分组的项目的平均值 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());
}
但是
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));
然后通过IdVertice
key:
Est
的平均值)
foreach (var el in list)
{
el.MediaEst = dict.TryGetValue(el.IdVertice, out double value) ? value : el.MediaEst;
}