0
votes

Créez un intersect de hashset et éliminez les éléments de la structure de classe avec des identifiants extraits

suppose que j'ai les classes suivantes:

List<ServiceStatistics> statistics = SoapService.GetStatistics(Now);

List<int> incomingIds = new List<int>();

foreach(var item in statistics)
{
    foreach(var element in item.Statistic)
    {
        incomingIds.Add(int.Parse(element.StatisticId));
    }
}

List<int> extract = RelevantDutyPlans.ExtractRelevantDutyPlans(incomingIds);


1 commentaires

Votre extrait renvoie la mauvaise variable.


3 Réponses :


0
votes

J'espère que vous pouvez utiliser SelectMany fort> pour aplatir la collection et procéder au filtre.

var filteredItems =  statistics.SelectMany(s => s.Elements)
                  .Where(s => extract.Contains(Convert.ToInt32(s.StatisticId)))
                  .ToList();


0 commentaires

2
votes

Que diriez-vous d'une approche différente de peu. Il suffit de supprimer tout de suite des plans non pertinents!

List<ServiceStatistics> statistics = SoapService.GetStatistics(Now);

foreach(var item in statistics)
{
   item.Elements.RemoveAll(x => !RelevantDutyPlans.Contains(int.Parse(x.StatisticId)));
}


1 commentaires

C'est une très belle approche, Thx beaucoup :) Vérifiera si elle s'adapte au flux de travail et donnez des commentaires :)



0
votes

Vous pouvez également utiliser LINQ pour créer une nouvelle liste code> si vous devez conserver l'original statististcs code> intact - E.G. Si vous pouviez exécuter plusieurs plans contre cela.

var relevantStatistics = statistics.Select(s => new {
                                                LocalId = s.LocalId,
                                                OrganizationId = s.OrganizationId,
                                                Elements = s.Elements.Where(e => !RelevantDutyPlans.Contains(Convert.ToInt32(e.StatisticId))).ToList()
                                           });


0 commentaires