(последняя строка кода интереса, остальное только для полного представления)
Используя следующий код, я хотел принимать VOTERS до тех пор, пока я не превысит необходимое количество голосов, но он останавливается непосредственно перед достижением этого максимального числа голосов, поэтому у моего пула избирателей на 1 голос меньше, чем я хотел ,
Есть ли чистый способ в LINQ, где я мог бы заставить его принимать голоса, пока он не набрал максимальное количество голосов? Я знаю, что мог бы добавить еще одного избирателя или сделать это в цикле, но мне любопытно, если бы вместо этого был хороший способ сделать это с помощью LINQ.
var voters = new List<Person>
{
new Person("Alice", Vote.Yes ),
new Person("Bob", Vote.Yes),
new Person("Catherine", Vote.No),
new Person("Denzel", Vote.Yes),
new Person("Einrich", Vote.Abstain),
new Person("Frederica", Vote.Abstain),
new Person("Goeffried", Vote.Abstain),
};
voters.Single(c => c.Name == "Alice").Voices = 100;
voters.Single(c => c.Name == "Bob").Voices = 150;
voters.Single(c => c.Name == "Catherine").Voices = 99;
voters.Single(c => c.Name == "Denzel").Voices = 24;
voters.Single(c => c.Name == "Einrich").Voices = 52;
voters.Single(c => c.Name == "Frederica").Voices = 39;
voters.Single(c => c.Name == "Goeffried").Voices = 99;
// this takes voters until we are BEFORE reaching X voices...
int voicesSoFar = 0;
int voicesNeeded = 300;
var eligibleVoters = voters.TakeWhile((p => (voicesSoFar += p.Voices) < voicesNeeded ));