private TInput FindRowByAttributes(TInput row) { var lookupHit = LookupData.Find(e => { bool same = true; foreach (var mc in TypeInfo.MatchColumns) { same &= mc.PropInInput.GetValue(row).Equals(mc.PropInOutput.GetValue(e)); if (!same) { break; } } return(same); }); if (lookupHit != null) { foreach (var rc in TypeInfo.RetrieveColumns) { var retrieveValue = rc.PropInOutput.GetValue(lookupHit); rc.PropInInput.TrySetValue(row, retrieveValue); } } return(row); }