Ho una lista di elementi e voglio prendereWhile la somma (o qualsiasi aggregazione degli elementi) soddisfa una certa condizione. Il seguente codice fa il lavoro, ma sono abbastanza sicuro che questo non sia un problema insolito per il quale dovrebbe esistere un modello corretto.Linq TakeWhile in base alla somma (o all'aggregato) degli elementi
var list = new List<int> { 1, 2, 3, 4, 5, 6, 7 };
int tmp = 0;
var listWithSum = from x in list
let sum = tmp+=x
select new {x, sum};
int MAX = 10;
var result = from x in listWithSum
where x.sum < MAX
select x.x;
C'è qualcuno che sa come risolvere il compito in modo più bello, probabilmente combinando TakeWhile e si aggregano in una query?
Thx
Sono ben consapevole che non si dovrebbero modificare variabili come effetto collaterale di una query. Se listWithSum viene usato due volte, porterà a risultati diversi se tmp non viene inizializzato in mezzo. Questo è uno dei motivi, perché sono convinto che questa soluzione è cattiva! –
var list = new List {1, 2, 3, 4, 5, 6, 7}; int tmp = 0; int MAX = 10; var result2 = list.TakeWhile (x => { tmp + = x; return tmp
thx Nick. Mentre questa è una versione più breve (e quindi più bella), ha lo stesso problema con un effetto collaterale. –