public async Task <IActionResult> Raport(int?type) { if (type != null) { if (type == 1) { List <Tuple <Nota, Student, Materie> > tuple = new List <Tuple <Nota, Student, Materie> >(); List <int> Ani = new List <int>(); var studenti = await Database.SelectAsync <Student>(); for (int i = 0; i < studenti.Count; i++) { var q = Database.From <Materie>().Join <Materie, Nota>((m, n) => m.Id == n.MaterieId && n.StudentId == studenti[i].Id).Select(x => Sql.Max(x.AnStudiu)); var result = await Database.ScalarAsync <int?>(q) ?? 0; Ani.Add(result); Nota n = null; Materie m = null; tuple.Add(Tuple.Create(n, studenti[i], m)); } ViewBag.AniStudiu = Ani; return(View(tuple)); } else if (type == 2) { var list = await _repo.getRaportAsync() as List <Tuple <Nota, Student, Materie> >; foreach (var item in list) { item.Item1.NotaObtinuta = await Database.ScalarAsync <Nota, int>(x => Sql.Max(x.NotaObtinuta), x => x.StudentId == item.Item2.Id && x.MaterieId == item.Item3.Id); } list.Sort((x, y) => { var cmp = x.Item2.Nume.CompareTo(y.Item2.Nume); if (cmp == 0) { cmp = x.Item2.Prenume.CompareTo(y.Item2.Prenume); } if (cmp == 0) { cmp = x.Item3.AnStudiu - y.Item3.AnStudiu; } if (cmp == 0) { cmp = x.Item3.NumeDisciplina.CompareTo(y.Item3.NumeDisciplina); } return(cmp); }); return(View(list)); } } return(View()); }