Here is the solution for your query
here i am creating a DataTable
DataTable dt = new DataTable("mytable");
DataColumn dc1 = new DataColumn("ID", typeof(int));
dc1.AutoIncrement = true;
dc1.AutoIncrementSeed = 1;
dc1.AutoIncrementStep = 1;
dt.Columns.Add(dc1);
dt.Columns.Add(new DataColumn("name", typeof(string)));
dt.Columns.Add(new DataColumn("age", typeof(string)));
dt.Columns.Add(new DataColumn("date", typeof(DateTime)));
for (int i = 0; i < 10; i++)
{
DataRow dr = dt.NewRow();
dr["name"] = "dasda " + i.ToString();
dr["age"] = (i * i).ToString();
switch (i)
{
case 0: dr["date"] = DateTime.Now.AddDays(i);
break;
case 1: dr["date"] = DateTime.Now.AddDays(2);
break;
case 2: dr["date"] = DateTime.Now.AddDays(i * i);
break;
case 3: dr["date"] = DateTime.Now.AddDays(i * i);
break;
case 4: dr["date"] = DateTime.Now.AddDays(2);
break;
case 5: dr["date"] = DateTime.Now.AddDays(i * i);
break;
case 6: dr["date"] = DateTime.Now.AddDays(2);
break;
case 7: dr["date"] = DateTime.Now.AddDays(i * i);
break;
case 8: dr["date"] = DateTime.Now.AddDays(i * i);
break;
case 9: dr["date"] = DateTime.Now.AddDays(2);
break;
default:
break;
}
dt.Rows.Add(dr);
}
now i am firing the LINQ query to fetch the records as you want..
var xyz = (from m in dt.Select()
let _name = m.Field<string>("name")
let _date = m.Field<DateTime>("date")
let _age = m.Field<string>("age")
let _id = m.Field<int>("id")
orderby _date descending
group m by _date into g
select new
{
_name = g.First()["name"].ToString(),
_id = Convert.ToInt32(g.First()["ID"]),
_age = g.First()["age"].ToString(),
_date = (DateTime)g.First()["date"]
}).ToList();
this query will give the distinct record on the behalf of date.for fetching last ten record i used order by descending.
you want top 10 record then simply call TAKE() you wiil get the result.
var res= xyz.Take(10);
you will get the top 10 records.