请帮我按日期排序前10名不同行 [英] Please Help me to take Top 10 Distinct Rows order by Date

查看:69
本文介绍了请帮我按日期排序前10名不同行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





我有一个Datatable有这样的记录...



Hi,

I have a Datatable having records like this...

JID                      Date                     RecentChatString
-----------------------------------------------------------------------
abc@gmail.com         11/Nov/2013 11:53:00        Hi
abc@gmail.com         11/Nov/2013 11:53:10        Hello
abc@gmail.com         11/Nov/2013 11:54:00        Good Morning
def@gmail.com         11/Nov/2013 12:03:00        Ok
abc@gmail.com         11/Nov/2013 12:05:10        Please reply
def@gmail.com         11/Nov/2013 12:15:00        Good after noon
def@gmail.com         11/Nov/2013 12:15:50        Ok bye





我希望获得按日期排序的前10个不同记录,并且仅表示每个JID的最近聊天..





I want to get Top 10 Distinct Records sorted by Date and, Means only the recent chat of each JID..

JID                      Date                     RecentChatString
-----------------------------------------------------------------------
abc@gmail.com         11/Nov/2013 12:05:10        Please reply
def@gmail.com         11/Nov/2013 12:15:50        Ok bye





现在我有一个这样的代码...我可以得到顶级使用此代码按日期排序的10条记录...

但是,它包含重复的JID ....请帮助我....(recent_index是一个DataTable)





Now I have a code like this... I can get the top 10 records sorted by date using this code...
But, It contains duplicate JID's.... Please help me .... (recent_index is a DataTable)

 DataRow recent_dr = recent_index.NewRow();
 recent_dr["JID"] = RosterId;
 recent_dr["Date"] = DateTime.Now;
 recent_dr["RecentChatString"] = _chatline;
 recent_index.Rows.Add(recent_dr);

 DataTable dtt = new DataTable("RecentChats");
  dtt.Columns.Add("JID", Type.GetType("System.String"));
 dtt.Columns.Add("Date", Type.GetType("System.DateTime"));
 dtt.Columns.Add("RecentChatString", Type.GetType("System.String"));

 IEnumerable<DataRow> recentTen = recent_index.AsEnumerable().OrderByDescending(x=>x["Date"]).Take(10);
recentTen.CopyToDataTable(dtt, LoadOption.OverwriteChanges);

 dtt.WriteXml(s + "\\FPhoneData\\chats\\index.xml");

推荐答案

最后包括 Distinct()并检查。

Include Distinct() at the end and check.
IEnumerable<datarow> recentTen = GetTable().AsEnumerable().OrderByDescending(x => x["Date"]).Take(10).Distinct();


以下是您查询的解决方案





这里我正在创建一个DataTable



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);

      }





现在我正在触发LINQ查询以获取您想要的记录..





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();





此查询将代表date.for获取最后十条记录的不同记录,我通过降序获得订单。 />
你想要前十名的记录然后只需调用TAKE()就可以获得结果。





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);





你将获得前10名记录。



you will get the top 10 records.


这篇关于请帮我按日期排序前10名不同行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆