2013-03-06 5 views
2

에 목록에서 해당 항목을 가지고 다음과 같은 경우나는 다음과 같은 한 상태

IDictionary<QuestionDuration, Int32> rules = _service.GetRules(); 

List<Question> questions = _service.GetQuestions(); 

public class Question { 
    public QuestionDuration Duration { get; set; } 
} 

사전 값 (INT32)가 나는 특정 기간이 목록에서 수행해야 질문의 수입니다 ... 그래서 사전이 있습니다

{{QuestionDuration.M2, 5}, {QuestionDuration.M4는, 3}, {QuestionDuration.M8, 0}, ...

그래서 나는 원본 목록을 작성해야 2 분 5 문제, 3 분 4 문제, 8 분 0 문제 등 목록 ...

나는 이것을 위해 람다 식을 그룹화하고 사용하려했지만 나는 할 수 없었다 ...

어떻게하면됩니까?

미구엘에게, 감사

답변

5
(규칙의 당신의 사전 세 가지 목록) IEnumerable<List<Question>>을 만듭니다

:

IDictionary<QuestionDuration, Int32> rules = _service.GetRules(); 
List<Question> questions = _service.GetQuestions(); 

var query = from r in rules 
      select questions.Where(q => q.Duration == r.Key) 
          .Take(r.Value).ToList(); 

팁 : 각 무작위 질문을 선택해야하는 경우 목록에 OrderBy(q => Guid.NewGuid())Take 연산자 바로 앞에 추가하십시오. 또는 무작위 해결책 :

var rand = new Random(); 
var query = from r in rules 
      select questions.Where(q => q.Duration == r.Key) 
          .OrderBy(q => rand.Next()) 
          .Take(r.Value).ToList(); 
+0

@lazyberszovsky : 우아한; 그러나 결정 론적이다. 상황에 따라 OP가 매번 선택된 각 카테고리에서 같은 질문을 원하지 않는다고 추론합니다. –

+0

@PieterGeerkens하지만 기간이 다르기 때문에 질문이 동일하지 않아야합니다. (질문을 올바르게 이해 한 경우) –

+0

@layberezovsky : 처음 2 분의 질문은 매번 동일 할 것입니다. 서로 다른 기간 동안 동일합니다. 혹시라도 똑같이 우아한 소매 셔플을 입고 계시나요? –