现在有一个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();
}
}
慕容3067478
TA贡献1773条经验 获得超3个赞
select action,max(date) date from table group by action order by date desc
- 7 回答
- 0 关注
- 655 浏览
添加回答
举报
0/150
提交
取消