public int GetHashCode(DataRow obj) { var values = obj.ItemArray.Where <object>((o, i) => settings.IsKey(i)); int hash = 0; foreach (var value in values) { string v = null; if (value is IConvertible) { v = ((IConvertible)value).ToString(CultureInfo.InvariantCulture); } else { v = value.ToString(); } //Console.WriteLine("{0} {1} {2} {3}", value.ToString(), value.GetType(), v.ToString(), v.GetHashCode()); hash = (hash * 397) ^ v.GetHashCode(); } return(hash); }