(строка интересующего кода - последняя, остальное - только для полного представления)
Используя следующий код, я хотел взять 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 ));