public static List <Tuple <PropertyInfo, object> > GetValues(Type type, Predicate <Row> predicate, Microsoft.Office.Interop.Excel.Range rows) { var values = new List <Tuple <PropertyInfo, object> >(); var properties = type.GetProperties(); var row = rows.ToModel().FirstOrDefault(r => predicate(r)); if (row != null) { properties.ToList().ForEach(property => { var columnHeader = GetColumnHeader(property); var cells = from cell in row.Cells where cell.ColumnHeader.Equals(columnHeader) select cell.Value; var value = cells.First(); values.Add(new Tuple <PropertyInfo, object>(property, value)); }); } return(values); }