using System.Collections.Generic;
public static void Main()
var data = GetTestData();
var result = data.GroupBy(x=> new {x.Name,x.Grade,x.CardID,x.Date})
.Select(x=> new PointCardViewModel
StudentName = x.Key.Name,
EvaluationDate = x.Key.Date,
LineItems = x.Select(c=> new LineItemViewModel
}).ToDictionary(key=>key.ClassPeriod,value=>(object)value)
var jsonData = JsonConvert.SerializeObject(result, Newtonsoft.Json.Formatting.Indented);
Console.WriteLine(jsonData);
public static IEnumerable<Sample> GetTestData()
Date = new DateTime(2020,10,1),
Class = "Period 1- Spanish",
Date = new DateTime(2020,10,2),
Class = "Period 1- English",
Date = new DateTime(2020,10,1),
Class = "Period 3- English",
public class PointCardViewModel
public int CardId { get; set; }
public string StudentName { get; set; }
public string Grade { get; set; }
public DateTime EvaluationDate { get; set; }
public IDictionary<string, object> LineItems { get; set; }
public class LineItemViewModel
public string ClassPeriod { get; set; }
public int Listen { get; set; }
public int Read { get; set; }
public int Write { get; set; }
public string Name{get;set;}
public string Grade{get;set;}
public int CardID{get;set;}
public DateTime Date{get;set;}
public string Class{get;set;}
public int Listen{get;set;}
public int Read{get;set;}
public int Write{get;set;}