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,查看更多内容