首页 > 解决方案 > 多重随机选择 Linq

问题描述

我有Questions表格和列表CategoryIds。我必须从每个CategoryId随机得到一个问题。现在我正在这样做:

var randomQuestions = new List<Question>();
foreach(int id in categoryIds){

randomQuestions.add(questions.Where(o => o.CategoryId== id).OrderBy(o => Guid.NewGuid()).FirstOrDefault());
}

但是有没有办法只用 Linq 做到这一点?谢谢

标签: c#entity-frameworklinq

解决方案


这应该在一个查询中完成您想要的

var randomQuestions = questions
    .Where(q => categoryIds.Contains(q.CategoryId))
    .GroupBy(q = > q.CategoryId)
    .Select(grp => grp.OrderBy(_ => Guid.NewGuid()).First())
    .ToList();

这将首先仅过滤您关心的类别中的问题,然后根据类别 ID 分组,并为每个组随机选择一个。


推荐阅读