C# 使用GroupBy的LINQ聚合中的特定单个属性
这是我的实体类:C# 使用GroupBy的LINQ聚合中的特定单个属性,c#,asp.net,linq,C#,Asp.net,Linq,这是我的实体类: public class DettaglioRiga { public int OrdId { get; set; } public string OrdStato { get; set; } public string ProdCodice { get; set; } public string ProdModelNumber { get; set; } public string ProdNome { get; set; }
public class DettaglioRiga
{
public int OrdId { get; set; }
public string OrdStato { get; set; }
public string ProdCodice { get; set; }
public string ProdModelNumber { get; set; }
public string ProdNome { get; set; }
public string ProdTipo { get; set; }
public int ProdQuantitaAcquistata { get; set; }
public int ProdQuantitaTotale { get; set; }
public double ProdCostoSingolo { get; set; }
public double ProdCostoTotale { get; set; }
public double ProdSpeseSpedizione { get; set; }
public DettaglioRiga()
{
}
}
然后我填充一个名为OrdinFiltrati的集合,现在我需要创建一个聚合集合,如下所示:
List<DettaglioRiga> listaProdotti = ordiniFiltrati
.Where(p => p.ProdTipo == "PRODOTTO")
.OrderBy(q => q.ProdNome)
.ToList();
var listaProdottiFiltrata = listaProdotti
.Distinct()
.GroupBy(g => new { g.ProdNome })
.Select(group => new DettaglioRiga
{
ProdNome = group.Key.ProdNome,
ProdCodice = group.ProdCodice, // (?)I cannot get this
ProdQuantitaTotale = group.Sum(D => D.ProdQuantitaTotale),
ProdCostoSingolo = group.Sum(C => C.ProdCostoSingolo)
});
基本上,我需要将ProdCodice与ProdName进行比较。在本例中,我将有一行:
ProdCodice ProdNome
S-3850759 Driller A
S-3850755 Driller A
S-3851196 Driller B
我想我必须对ProdName和ProdCodice进行分组您需要向分组键添加
ProdCodice
:
var listaProdottiFiltrata = listaProdotti
.Distinct()
.GroupBy(g => new { g.ProdNome, g.ProdCodice }) // <-- added another value to group on
.Select(group => new DettaglioRiga
{
ProdNome = group.Key.ProdNome,
ProdCodice = group.Key.ProdCodice,
ProdQuantitaTotale = group.Sum(D => D.ProdQuantitaTotale),
ProdCostoSingolo = group.Sum(C => C.ProdCostoSingolo)
});
试试这个:
List<DettaglioRiga> listaProdotti = ordiniFiltrati.Where(p => p.ProdTipo == "PRODOTTO").OrderBy(q => q.ProdNome).ToList();
var listaProdottiFiltrata = listaProdotti.Distinct().GroupBy(g => new { g.ProdNome }).Select(group => new
{
ProdNome = group.Key.ProdNome,
ProdCodice = group.First().ProdCodice, // (?)I cannot get this
ProdQuantitaTotale = group.Sum(D => D.ProdQuantitaTotale),
ProdCostoSingolo = group.Sum(C => C.ProdCostoSingolo)
});
List listaProdotti=ordiniFiltrati.Where(p=>p.ProdTipo==“PRODOTTO”).OrderBy(q=>q.ProdNome.ToList();
var listaprodottitfiltera=listaProdotti.Distinct().GroupBy(g=>new{g.ProdNome})。选择(group=>new
{
ProdNome=group.Key.ProdNome,
ProdCodice=group.First()
ProdQuantitaTotale=group.Sum(D=>D.ProdQuantitaTotale),
ProdCostoSingolo=group.Sum(C=>C.ProdCostoSingolo)
});
谢谢Stanley,我在请求中添加了更多细节。就我所见,我将通过聚合“Nome”和“Codice”来创建ProdCodice,对吗?似乎是正确的,但不幸的是,它并没有像预期的那样增加值。基本上,我必须使用GroupBy“ProdCodice”和“ProdName”进行第一次出现。
ProdCodice = group.First().ProdCodice,
ProdCodice = group.Max(g => g.ProdCodice),
List<DettaglioRiga> listaProdotti = ordiniFiltrati.Where(p => p.ProdTipo == "PRODOTTO").OrderBy(q => q.ProdNome).ToList();
var listaProdottiFiltrata = listaProdotti.Distinct().GroupBy(g => new { g.ProdNome }).Select(group => new
{
ProdNome = group.Key.ProdNome,
ProdCodice = group.First().ProdCodice, // (?)I cannot get this
ProdQuantitaTotale = group.Sum(D => D.ProdQuantitaTotale),
ProdCostoSingolo = group.Sum(C => C.ProdCostoSingolo)
});