DataTable怎么移除指定字段的重复行。然后按另一字段排序

现在有一个datatable,数据是这样的 action     date aaaa       2012-2-3 12:11:22 bbbb      2012-2-1  11:22:32 aaaa       2012-2-1  10:22:22   我想得到的最终结果是 action     date aaaa       2012-2-3 12:11:22 bbbb      2012-2-1  11:22:32 也就是去除action字段重复的并且保留最新时间的action,然后按照date排序,最新的在前
一只名叫tom的猫
浏览 656回答 7
7回答

胡子哥哥

用Linq 先根据查询结果用时间排序,再用Linq的Distinct()方法对action重复值做过滤。给你个例子 DataTable dt=new DataTable(); dt.Columns.Add("action"); dt.Columns.Add("date"); dt.Columns["date"].DataType = typeof (DateTime); DataRow dr = dt.NewRow(); dr["action"] = "aaaa"; dr["date"] =Convert.ToDateTime("2012-2-3 12:11:22"); dt.Rows.Add(dr); dr = dt.NewRow(); dr["action"] = "bbbb"; dr["date"] = Convert.ToDateTime("2012-2-3 12:25:22"); dt.Rows.Add(dr); dr = dt.NewRow(); dr["action"] = "aaaa"; dr["date"] = Convert.ToDateTime("2012-2-3 12:22:22"); dt.Rows.Add(dr); var drs = (from data in dt.AsEnumerable() orderby data["date"] descending select data).Distinct(new DataRowCompare());//根据时间反序排序获取结果 foreach (DataRow dataRow in drs) { Console.WriteLine("{0}-{1}",dataRow["date"],dataRow["action"]); } Console.ReadLine(); } //过滤条件,根据action过滤 public class DataRowCompare : IEqualityComparer { public bool Equals(DataRow x, DataRow y) { return x["action"] == y["action"]; } public int GetHashCode(DataRow obj) { return obj["action"].ToString().GetHashCode(); } }

慕容3067478

select  action,max(date)  date  from table group by action order by date desc

慕姐8265434

datatable 可以这样查询吗?

阿波罗的战车

呵呵。。。

慕运维8079593

能不能给演示一下啊?呵呵
打开App,查看更多内容
随时随地看视频慕课网APP