c# - 使用 LINQ、GroupBy 更改输出样式
问题描述
我有这个DotNetFiddle。
代码:
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
// create Questions
var questionOne = new Question(){QuestionId = 1, ActualQuestion = "Who"};
var questionTwo = new Question(){QuestionId = 2, ActualQuestion = "What"};
var questionThree = new Question(){QuestionId = 3, ActualQuestion = "Where"};
// Assign questions to the specified list of questions
var applicationOneQuestions = new List<Question>(){questionOne, questionTwo, questionThree};
var applicationTwoQuestions = new List<Question>() {questionOne, questionTwo};
var applicationThreeQuestions = new List<Question>() {questionOne, questionThree};
var applicationFourQuestions = new List<Question>() {questionOne};
// Create Applications
var applicationOne = new Application(){AppId = 1, Questions = applicationOneQuestions};
var applicationTwo = new Application(){AppId = 2, Questions = applicationTwoQuestions};
var applicationThree = new Application() {AppId = 3, Questions = applicationThreeQuestions};
var applicationFour = new Application() {AppId = 4, Questions = applicationFourQuestions};
// Create List of Applications
var lstApplications = new List<Application>(){applicationOne, applicationTwo, applicationThree, applicationFour};
// Group Applications based on Questions
var groupApplications = lstApplications.GroupBy(x => x.Questions).Select(t => new Section { AppIds = t.Select(z => z.AppId).ToList() , Questions = t.Key}).ToList();
foreach(var item in groupApplications)
{
foreach(var appId in item.AppIds)
{
Console.WriteLine(appId);
}
foreach(var question in item.Questions)
{
Console.WriteLine(question.ActualQuestion);
}
Console.WriteLine("\n");
}
}
}
public class Application
{
public int AppId { get; set; }
public List<Question> Questions { get; set; }
}
public class Section
{
public List<int> AppIds { get; set; }
public List<Question> Questions { get; set; }
}
public class Question
{
public int QuestionId {get;set;}
public string ActualQuestion {get;set;}
}
运行程序后,您会得到如下输出:
1
Who
What
Where
2
Who
What
3
Who
Where
4
Who
现在,我想将输出更改为如下所示:
A1, A2, A3, A4 - Who
A1, A2 - What
A1, A3 - Where
基本上,
- 应用程序 1、2、3、4 都包含问题 1 - 谁
- 申请 1、2 包含问题 2 - 什么
- 申请 1、3 包含问题 3 - 在哪里
我如何实现这个输出?
解决方案
我不太确定方法语法是什么,但这里有一个查询语法,可以为您提供所需的输出。我认为您在尝试降低方法语法时遇到的麻烦可能是由于Select
在您想要使用SelectMany
.
var questionGroups = from application in lstApplications
from question in application.Questions
group application.AppId by question.ActualQuestion;
foreach (var question in questionGroups)
Console.WriteLine($"{string.Join(" ", question.Select(x => $"A{x}"))} - {question.Key}");
推荐阅读
- python - 不指定最小值和最大值的随机二维数组
- python - 从 Python 中的句子列表中删除非字母字符
- tensorflow - tf.data.experimental.rejection_resample 有问题吗?
- python - 如何使用 python boto3 将新角色权限附加到 aws 中的 iam_role?
- php - OR 条件中的嵌套 SELECT
- mingw-w64 - 使用带有 Mingw-w64 的 wininet 编译 c 源的链接器错误
- html - 当您使用纯 html 单击文本时,如何使文本打开到新页面?
- java - 局域网唤醒应用程序仅适用于最近关闭的设备
- node.js - Sequelize:定义关联
- shell - sed 命令替换制表符和空格分隔的文本行中的单词