gpt4 book ai didi

c# - 使用 linq 和 lambda 对列表进行分组和展平

转载 作者:行者123 更新时间:2023-11-30 15:28:46 36 4
gpt4 key购买 nike

我有以下类(class)

public class SolicitacaoConhecimentoTransporte
{
public long ID { get; set; }

public string CodigoOriginal { get; set; }

public DateTime Data { get; set; }

public List<CaixaConhecimentoTransporte> Caixas { get; set; }
}

我想知道是否有一种方法可以使用 Linq(使用 lambda 表达式语法)实现与下面代码相同的行为,

List<SolicitacaoConhecimentoTransporte> auxList = new List<SolicitacaoConhecimentoTransporte>();

foreach (SolicitacaoConhecimentoTransporte s in listaSolicitacao)
{
SolicitacaoConhecimentoTransporte existing =
auxList.FirstOrDefault(f => f.CodigoOriginal == s.CodigoOriginal &&
f.Data == s.Data &&
f.ID == s.ID);

if (existing == null)
{
auxList.Add(s);
}
else
{
existing.Caixas.AddRange(s.Caixas);
}
}

return auxList;

换句话说,将具有相同属性的所有实体分组并将所有列表平整为一个。

提前致谢。

最佳答案

使用匿名对象按三个属性分组。然后将每个组投影到新的 SolicitacaoConhecimentoTransporte 实例。使用 Enumerable.SelectMany 从每个组中获取 CaixaConhecimentoTransporte 的展平序列:

listaSolicitacao.GroupBy(s => new { s.CodigoOriginal, s.Data, s.ID })
.Select(g => new SolicitacaoConhecimentoTransporte {
ID = g.Key.ID,
Data = g.Key.Data,
CodigoOriginal = g.Key.CodigoOriginal,
Caixas = g.SelectMany(s => s.Caixas).ToList()
}).ToList()

关于c# - 使用 linq 和 lambda 对列表进行分组和展平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25069119/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com