为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

一只名叫tom的猫 2018-12-06 22:46:14
现在有一个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排序,最新的在前
查看完整描述

7 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

用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(); } }
查看完整回答
反对 回复 2018-12-09
?
慕容3067478

TA贡献1773条经验 获得超3个赞

select  action,max(date)  date  from table group by action order by date desc
查看完整回答
反对 回复 2018-12-09
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

datatable 可以这样查询吗?
查看完整回答
反对 回复 2018-12-09
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

呵呵。。。
查看完整回答
反对 回复 2018-12-09
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

能不能给演示一下啊?呵呵
查看完整回答
反对 回复 2018-12-09
  • 7 回答
  • 0 关注
  • 655 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信