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);
3 Réponses :
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();
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))); }
C'est une très belle approche, Thx beaucoup :) Vérifiera si elle s'adapte au flux de travail et donnez des commentaires :)
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()
});
Votre extrait code> code> renvoie la mauvaise variable.