fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. public class Test
  6. {
  7. public static void Main()
  8. {
  9. var tblClass = new List<TblClassRow>
  10. {
  11. new TblClassRow("Class1", "A"),
  12. new TblClassRow("Class1", "B"),
  13. new TblClassRow("Class1", "C"),
  14. new TblClassRow("Class2", "B"),
  15. new TblClassRow("Class2", "C"),
  16. new TblClassRow("Class3", "C"),
  17.  
  18. };
  19.  
  20. var res = tblClass
  21. .GroupBy(g=> g.ClassId)
  22. .Select(c =>
  23. {
  24. var rr = new ResultRow {Class = c.Key};
  25. foreach (var r in tblClass.GroupBy(gg=> gg.Student))
  26. {
  27. rr.Students[r.Key] = "N";
  28. }
  29. foreach (var r in c.Where(w=> w.ClassId == c.Key))
  30. {
  31. rr.Students[r.Student] = "Y";
  32. }
  33. return rr;
  34. }).ToList();
  35.  
  36. Console.WriteLine(res.First().GetHeader());
  37. foreach (var r in res)
  38. {
  39. Console.WriteLine(r.GetSolidRow());
  40. }
  41. }
  42.  
  43. internal class TblClassRow
  44. {
  45. public TblClassRow(string classId, string student)
  46. {
  47. ClassId = classId;
  48. Student = student;
  49. }
  50.  
  51. public string ClassId { get; set; }
  52.  
  53. public string Student { get; set; }
  54. }
  55.  
  56. internal class ResultRow
  57. {
  58. public ResultRow()
  59. {
  60. Students = new Dictionary<string, string>();
  61. }
  62.  
  63. public string Class { get; set; }
  64.  
  65. public IDictionary<string, string> Students { get; set; }
  66.  
  67. public string GetHeader()
  68. {
  69. return Students.Aggregate("Class", (current, s) => current + "|" + s.Key);
  70. }
  71.  
  72. public string GetSolidRow()
  73. {
  74. return Students.Aggregate(Class, (current, s) => current + "|" + s.Value);
  75. }
  76. }
  77. }
Success #stdin #stdout 0.05s 24152KB
stdin
Standard input is empty
stdout
Class|A|B|C
Class1|Y|Y|Y
Class2|N|Y|Y
Class3|N|N|Y