現在有一個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 關注
- 678 瀏覽
添加回答
舉報
0/150
提交
取消