c# - 多重随机选择 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 做到这一点?谢谢
解决方案
这应该在一个查询中完成您想要的
var randomQuestions = questions
.Where(q => categoryIds.Contains(q.CategoryId))
.GroupBy(q = > q.CategoryId)
.Select(grp => grp.OrderBy(_ => Guid.NewGuid()).First())
.ToList();
这将首先仅过滤您关心的类别中的问题,然后根据类别 ID 分组,并为每个组随机选择一个。
推荐阅读
- android - 导入 com.google.android.gms.auth.api.Auth 的未解决参考
- python - Python计算CSV中的行数并将每一行传递给变量
- r - 每周时间序列 - 在 r 中更改 x 轴标签
- xml - 如何使用 XSLT 从提要转换此 XML?
- azure - Azure 功能甚至无法手动启动(无错误消息)
- c - Segmentation Fault (Core dumped),但找不到故障
- ios - 我的 iOS 应用程序仅在“在设备上测试”时才会收到来自 firebase 的推送通知
- angular - 是否可以合并两个模型/数组并在角度 6 中使用 *ngFor 显示它们?
- apache-kafka - Confluent Kafka Avro 序列化器和 Spring Cloud
- apache-spark - Apache Spark orc 读取大量小文件时的读取性能