public ModelMerge(CommandProvider <TKey> commandProvider, IEnumerable <Type> modelTypes) { CommandProvider = commandProvider; ModelTypes = modelTypes; ModelTables = modelTypes.Select(t => CommandProvider.GetTableInfo(t)); var mappedColumns = modelTypes.SelectMany(t => commandProvider.GetMappedColumns(t)); ModelProperties = mappedColumns.ToLookup(pi => pi.DeclaringType); ModelColumns = mappedColumns.Select(pi => { var col = new ColumnInfo(pi); CommandProvider.MapProviderSpecificInfo(pi, col); return(col); }); }