public static T First <T>(string fieldToCompare, object valueToCompare, IEnumerable <T> rows) { Func <T, bool> compare = (i) => { DataRow r = i as DataRow; if (EC.IsNuDelDetch(r)) { return(false); } else { if (!r.IsNull(fieldToCompare) && r.Field <object>(fieldToCompare).Equals(valueToCompare)) { return(true); } else { return(false); } } }; T result = rows.AsQueryable().FirstOrDefault <T>(compare); return(result); }
/// <summary> /// Creates a non-repeated list of items (HashSet) from values in a given DataTable's Column /// </summary> /// <typeparam name="T">the type of desired elements in the output list</typeparam> /// <param name="column">input Column with items to generate the list from</param> /// <returns>a HashSet with elements of generic type</returns> public static IList <T> HashFrom <T>(IEnumerable <DataRow> array, String Field) { if (array == null) { throw new ArgumentException("arra is null", "array"); } IEnumerable <object> array2 = EC.NotNulls(array, Field).Select(o => o.Field <object>(Field)); Func <object, T> converter = o => (T)Convert.ChangeType(o, typeof(T)); IEnumerable <T> enumcol = array2.Distinct().Select <object, T>(converter); return(enumcol.ToList <T>()); }
/// <summary> /// Forces the check-up of a Data Row according to the DataColumnChangeEventHandler given /// </summary> /// <typeparam name="T">DatTable, DataRow[] or DataRow</typeparam> /// <param name="table2"> object to check</param> /// <param name="columnChecker">DataColumnChangeEventHandler to use for checking</param> public static void CheckRows <T>(T table2, DataColumnChangeEventHandler columnChecker) { Type tipo = typeof(T); if (tipo.Equals(typeof(DataTable))) { DataTable dt = table2 as DataTable; DataRow[] rows = dt.Rows.OfType <DataRow>().ToArray(); CheckRows(rows, columnChecker); } else if (tipo.Equals(typeof(DataRow[]))) { IEnumerable <DataRow> rows = table2 as IEnumerable <DataRow>; foreach (DataRow r in rows) { CheckRows(r, columnChecker); } } else if (tipo.Equals(typeof(DataRow))) { DataRow r = table2 as DataRow; DataRow currentRow = null; currentRow = r; DataRowChangeEventArgs args = new DataRowChangeEventArgs(currentRow, DataRowAction.Change); if (currentRow.RowState == DataRowState.Unchanged) { currentRow.SetModified(); } EC.CheckRowColumn(args, columnChecker); currentRow.AcceptChanges(); } else { NotImplemented(); } }