Lea*_*res 3 .net c# linq lambda grouping
我有以下课程
public class SolicitacaoConhecimentoTransporte
{
public long ID { get; set; }
public string CodigoOriginal { get; set; }
public DateTime Data { get; set; }
public List<CaixaConhecimentoTransporte> Caixas { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以使用 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;
Run Code Online (Sandbox Code Playgroud)
换句话说,将所有具有相同属性的实体分组并将所有列表合并为一个。
提前致谢。
使用匿名对象按三个属性分组。然后将每个组投影到新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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1113 次 |
| 最近记录: |