(line of code of interest is the last one, the rest is just for a full representation)
Using the following code, I wanted to take VOTERS until I exceeded
You're looking for
voters.TakeWhile(p => { bool exceeded = voicesSoFar > voicesNeeded ; voicesSoFar += p.Voices; return !exceeded; });
If you insist on a one-liner, this will work by comparing the previous value:
voters.TakeWhile(p => (voicesSoFar += p.Voices) - p.Voices < voicesNeeded);