I have a requirement. like....
Sname Marks Percentage
aa 50 50
aa 60 60
bb 80 80
bb 60 60
here i want to add marks and display percentage like below dynamically
Sname Marks Percentage
aa 50 50
aa 60 60
aa 110 55
bb 80 80
bb 60 60
bb 140 70
It should be done using the linq query I am using the follwing linq query which performs grouping for display.
List
orderby g.Key.StudentName
select new Studentsmarkslist { StudentName = g.Key.StudentName,
Total = g.Key.Total,
Percentage = g.Key.Percentage
}).ToList();
return mrksbrpby

Jignesh TrivediPosted May 15, 2013, 6:15 AM
Hi,
you can get result by union.
try
if my class is
public class DataTest
{
public string Sname { get; set; }
public int Marks { get; set; }
public int Percentage { get; set; }
}
//and i have some dummy data like
List dataTest = new List();
dataTest.Add(new DataTest { Sname = "aa", Marks = 50, Percentage = 50 });
dataTest.Add(new DataTest { Sname = "aa", Marks = 60, Percentage = 60 });
dataTest.Add(new DataTest { Sname = "bb", Marks = 80, Percentage = 80 });
dataTest.Add(new DataTest { Sname = "bb", Marks = 60, Percentage = 60 });
//now get sum of mark and average of percentage.
List mrksbrpby = (from n in dataTest
group n by new { n.Sname } into grp
orderby grp.Key.Sname
select new DataTest
{
Sname = grp.Key.Sname,
Marks = grp.Sum(mark=>mark.Marks),
Percentage = Convert.ToInt32(grp.Average(per => per.Percentage)),
}).ToList();
//now merge it with original list
dataTest = dataTest.Union(mrksbrpby).OrderBy(t => t.Sname).ToList();
hope this will help you.
Jay SPosted May 14, 2013, 6:47 AM
You're grouping by each of your variables, if all of them are different then it will create a line for each in your data.
You should be grouping by StudentName only.
Also, you shouldn't sum a percentage ;) Really you should re-calculate the percentage based upon the summed(grouped) values.