using System.Collections;
using System.Collections.Generic;
public string Category { get; set; }
public string SubCategory { get; set; }
public string CategoryDesc { get; set;}
public string AccountNo { get; set; }
public string GroupCode { get; set; }
public string JobNo { get; set; }
public int FiscalYr {get; set; }
public int FiscalPd {get; set; }
public decimal Amount { get; set; }
private static IEnumerable<Transaction> SampleData()
List<Transaction> list = new List<Transaction>(new Transaction[]
new Transaction { AccountNo = "4-1000", Category = "Sales", SubCategory = "0", CategoryDesc = "Revenue", Amount = 100, JobNo = "0101", GroupCode = "1", FiscalYr=2018, FiscalPd=1},
new Transaction { AccountNo = "4-1100", Category = "Sales", SubCategory = "0", CategoryDesc = "Revenue", Amount = 200, JobNo = "0101", GroupCode = "1", FiscalYr=2018, FiscalPd=2},
new Transaction { AccountNo = "5-1000", Category = "RM", SubCategory = "1", CategoryDesc = "Raw Material", Amount = 100, JobNo = "0101", GroupCode = "1", FiscalYr=2018, FiscalPd=2},
new Transaction { AccountNo = "5-1100", Category = "RM", SubCategory = "2", CategoryDesc = "Subcon", Amount = 300, JobNo = "0202" , GroupCode = "1", FiscalYr=2018, FiscalPd=3},
new Transaction { AccountNo = "5-1300", Category = "RM", SubCategory = "3", CategoryDesc = "Personnal", Amount = 500, JobNo = "0303", GroupCode = "1", FiscalYr=2018, FiscalPd=1},
new Transaction { AccountNo = "5-1100", Category = "RM", SubCategory = "2", CategoryDesc = "Subcon", Amount = 400, JobNo = "0202", GroupCode = "1", FiscalYr=2018, FiscalPd=3},
new Transaction { AccountNo = "4-1000", Category = "Sales", SubCategory = "0", CategoryDesc = "Revenue", Amount = 100, JobNo = "0101", GroupCode = "1", FiscalYr=2018, FiscalPd=2},
new Transaction { AccountNo = "4-1100", Category = "Sales", SubCategory = "0", CategoryDesc = "Revenue", Amount = 200, JobNo = "0101", GroupCode = "1", FiscalYr=2018, FiscalPd=1},
new Transaction { AccountNo = "5-1000", Category = "RM", SubCategory = "1", CategoryDesc = "Raw Material", Amount = 100, JobNo = "0101", GroupCode = "1", FiscalYr=2018, FiscalPd=1},
new Transaction { AccountNo = "5-1100", Category = "RM", SubCategory = "2", CategoryDesc = "Subcon", Amount = 300, JobNo = "0202" , GroupCode = "1", FiscalYr=2018, FiscalPd=3},
new Transaction { AccountNo = "5-1300", Category = "RM", SubCategory = "3", CategoryDesc = "Personnel", Amount = 500, JobNo = "0303", GroupCode = "1", FiscalYr=2018, FiscalPd=2},
new Transaction { AccountNo = "5-1100", Category = "RM", SubCategory = "2", CategoryDesc = "Subcon", Amount = 400, JobNo = "0202", GroupCode = "1", FiscalYr=2018, FiscalPd=1}
public static void Main()
foreach (var account in data.Select(d => d.AccountNo).Distinct())
Console.WriteLine("Account No: " + account);
var reportData = from d in data
where d.AccountNo == account
group d by new {d.Category, d.GroupCode, d.JobNo} into g
Category = g.Key.Category,
CurrentYrMth = g.Where(t => t.FiscalPd == 3).Sum(t => t.Amount),
CurrentYrYTD = g.Where(t => t.FiscalPd >= 3 && t.FiscalPd <= 3).Sum(t => t.Amount),
foreach (var rd in reportData)
string.Format("Results: {0} - CurrentYrMth: {1}, CurrentYrYTD: {2}",