Si nous avons une classe qui contient un certain nombre comme ceci:
class Person
{
public string Name {get; set;}
public int Amount {get; set;}
}
et puis une collection de personnes:
IList<Person> people;
Qui contient, disons que 10 personnes de noms aléatoires et les montants est-il une expression Linq qui va me rendre un sous-groupe d'objets de la Personne dont la somme remplit une condition?
Par exemple je veux que le premier x personnes dont la somme de la Quantité est inférieure à 1000. Je peux le faire traditionnellement par
var subgroup = new List<Person>();
people.OrderByDescending(x => x.Amount);
var count = 0;
foreach (var person in people)
{
count += person.Amount;
if (count < requestedAmount)
{
subgroup.Add(person);
}
else
{
break;
}
}
Mais je me demandais si il y a un élégant Linq moyen de faire quelque chose comme ceci en utilisant la Somme, puis une autre fonction comme Prendre?
Mise à JOUR
C'est fantastique:
var count = 0;
var subgroup = people
.OrderByDescending(x => x.Amount)
.TakeWhile(x => (count += x.Amount) < requestedAmount)
.ToList();
Mais je me demande si je peux changer quelque chose à cela dans le but de saisir la personne suivante dans la liste et ajouter le reste à la somme de sorte que le montant total est égal montant demandé.