check whether it helps
DataTable dt1 = new DataTable();
dt1.Columns.Add("ID", typeof(int));
dt1.Columns.Add("Name", typeof(string));
dt1.Columns.Add("Address", typeof(string));
dt1.Columns.Add("Phone", typeof(float));
DataTable dt2 = new DataTable();
dt2.Columns.Add("ID", typeof(int));
dt2.Columns.Add("Address", typeof(string));
dt2.Columns.Add("Phone", typeof(string));
List<string> lst1 = new List<string>();
List<string> lst2 = new List<string>();
dt1.Columns.OfType<DataColumn>().ToList().ForEach(k => lst1.Add(k.ColumnName +"-" + k.DataType.Name));
dt2.Columns.OfType<DataColumn>().ToList().ForEach(k => lst2.Add(k.ColumnName + "-" + k.DataType.Name));
var result = lst1.Where(k => !lst2.Contains(k)).ToList();