use
DateTime.ParseExact Method [
^]
dt = dt.AsEnumerable().OrderByDescending(r => (DateTime.ParseExact(r["DateColumnName"] + "", "mm/dd/yyyy", CultureInfo.InvariantCulture))).CopyToDataTable();
if you are worried about
null
or other string data then
DateTime.TryParseExact Method [
^] would be the best choice
DataTable dt = new DataTable();
dt.Columns.Add("DateColumnName");
dt.Rows.Add("11/14/2017");
dt.Rows.Add("11/13/2017");
dt.Rows.Add("11/16/2017");
dt.Columns.Add("NewColumnTemp");
dt.AsEnumerable().ToList().ForEach(row =>
{
string date = row["DateColumnName"] + "";
DateTime dateTemp;
DateTime? dateTempNull = null;
bool isValid = DateTime.TryParseExact(date, "mm/dd/yyyy", CultureInfo.CurrentCulture, DateTimeStyles.None, out dateTemp);
row["NewColumnTemp"] = isValid ? dateTemp : dateTempNull;
});
DataView dv = dt.DefaultView;
dv.Sort = "NewColumnTemp desc";
dt = dv.ToTable();
dt.Columns.Remove("NewColumnTemp");