2012-01-04 3 views
-2

에 따라 부분 집합하기 내가 개체라는 이름의 항목이 (Item의 Size 속성)이 특정 수 (임계 값)를 초과하지 않습니다.LINQ하십시오 <code>List<Item></code></p> <p>에서</p> <pre><code>public class Item { public Guid Id { get; set; } public long Size { get; set; } } </code></pre> <p>내가 필요하면이 목록을 조회하고 크기를 누적 행의 수를 반환하는 것입니다 : 크기

그런 다음 이러한 요소를 처리하여 원래 목록에서 제거하고 모든 요소가 처리 될 때까지 동일한 쿼리를 사용하여 다음 요소를 가져올 수 있습니다.

예 목록 :

Id  Size 
---------------- 
1   10 
2   13 
3   5 
4   30 
5   10 

내 원하는 임계 값들이 누적 크기가 25을 초과하지 않기 때문에 ID 1 & 2 항목을 반환해야합니다 (25)

쿼리의 최대 크기입니다 말 그런 다음이 두 값을 제거합니다. 다음에 쿼리를 반환해야합니다 3 & 5. ID 4는 25를 초과하므로 절대로 반환하지 않아야합니다.

아이디어가 있으십니까?

+0

당신이 행 번호 누적 size''에 의해 무엇을 의미? – sll

+1

"cumulated"란 지금까지 선택된 모든 행에서 모든 Size 속성의 * total *을 의미합니까? –

+1

난 그냥 루프를 작성합니다. Take (외부) 누적기를 포함하는 TakeWhile 접근법이있을 수 있지만, Linq가 전통적으로 의도했던 바깥에서 작업하고 있습니다. 아니요, 루프를 작성하고 합계를 유지합니다. –

답변

0

나는 어떤 합계 값을 저장해야하지만, TakeWhile이 작업을 수행해야한다고 생각합니다. 이 같은
뭔가 :

var someValues = Enumerable.Range(0, 100); 
var runningSum = 0; 
var whereSumLessThan100 = someValues.TakeWhile(
    item => { runningSum += item; return runningSum < 100; }).ToList(); 
foreach(var item in whereSumLessThan100) 
    Console.WriteLine(item); 
Console.WriteLine("Sum: " + whereSumLessThan100.Sum()); 
+0

TakeWhile ... 물론 :) 감사합니다! – SolarX

관련 문제

 관련 문제