Hi,
The Objective of code is:
In a class there are 100 students, and in talent test they got some marks. I want to rank those students. To implement this,
In Sql Server there are two functions called
Rank and
Denserank .
Here i implemented those functions in C# using
Lambda expressions .
In data base, My table contains Three columns
id,Name,Marks
and i used entity data model.
Here is the code:
#region Rank
List<tableToRankStudents> data = dbContext.tableToRankStudentses.ToList();
int intRank = 0;
int intNext = 1;
Func<IGrouping<int?, tableToRankStudents>, int> getRank = (grouping) =>
{
int answer = intRank += intNext;
intNext = grouping.Count();
return answer;
};
var ranked = data
.GroupBy(v => v.Marks)
.OrderByDescending(v => v.First().Marks)
.Select(v => new
{
Items = v,
Rank = getRank(v)
})
.SelectMany(v => v.Items, (s, i) => new
{
Name = i.Names,
Marks = i.Marks,
Rank = s.Rank
});
gvRankResult.DataSource = ranked.ToList();
gvRankResult.DataBind();
#endregion Rank
#region Dense Rank
int intDenseRank = 0;
int intDenseNext = 1;
Func<IGrouping<int?, tableToRankStudents>, int> getDenseRank = (grouping) =>
{
int answer = intDenseRank = intDenseNext;
intDenseNext += 1;
return answer;
};
var DenseRanked = data
.GroupBy(v => v.Marks)
.OrderByDescending(v => v.First().Marks)
.Select(v => new
{
Items = v,
Rank = getDenseRank(v)
})
.SelectMany(v => v.Items, (s, i) => new
{
Name = i.Names,
Marks = i.Marks,
Rank = s.Rank
});
gvDenseRankResult.DataSource = DenseRanked.ToList();
gvDenseRankResult.DataBind();
#endregion Dense Rank
Thank you,
Govind