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 }, ...

所以我需要从原始列表中创建一个列表,其中包含 5 个 2 分钟的问题、4 个 3 分钟的问题、0 个 8 分钟的问题等......

我试图为此分组并使用 lambda 表达式,但我无法...

我怎样才能做到这一点?

谢谢你,

米格尔

4

1 回答 1

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();
于 2013-03-06T20:58:23.830 回答