Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 0
API Reference
Every public type and member, by package. Behaviour is described on the linked pages; this is the signature list.
All packages target .NET 10 and are version 2.0.0.
No dependencies. Namespace PepperX.QueryForge unless stated.
publicclassQuery{publicQueryCriteriaCriteria{get;set;}publicQueryPagingPaging{get;set;}publicIReadOnlyList<string>SelectColumns{get;set;}publicIReadOnlyList<SortDescriptor>SortColumns{get;set;}publicIReadOnlyList<GroupByDescriptor>GroupByColumns{get;set;}}publicrecordQueryCriteria{publicIReadOnlyList<ConditionGroup>Groups{get;init;}publicLogicLogic{get;init;}publicQueryCriteria(IReadOnlyList<ConditionGroup>?groups=null,Logiclogic=Logic.And);}publicrecordConditionGroup{publicIReadOnlyList<Condition>Conditions{get;init;}publicLogicLogic{get;init;}publicConditionGroup(IReadOnlyList<Condition>?conditions=null,Logiclogic=Logic.And);}publicrecordCondition(stringColumnName,ConditionOperatorOperator,object?Value=null,object?ValueTo=null);publicrecordQueryPaging(intSize=12,intNumber=1);publicrecordSortDescriptor(stringColumnName,SortOrderSortOrder=SortOrder.Ascending):IColumnDescriptor;publicrecordGroupByDescriptor(stringColumnName,SortOrderSortOrder=SortOrder.Ascending):IColumnDescriptor;publicinterfaceIColumnDescriptor{stringColumnName{get;}}See Query Model.
publicenumLogic{And,Or,AndNot,OrNot}// 0, 1, 2, 3publicenumSortOrder{Ascending,Descending}// 0, 1publicenumQueryResultType{Flat,Grouped}// 0, 1publicenumQueryValidationMode{SilentStrip,ThrowException}// 0, 1publicenumConditionOperator{Equals,NotEquals,Contains,NotContains,// 0, 1, 2, 3StartsWith,EndsWith,LessThan,GreaterThan,// 4, 5, 6, 7LessThanOrEqualTo,GreaterThanOrEqualTo,Between// 8, 9, 10}publicrecordQueryResult<TModel>{publicQueryResultMetaMeta{get;init;}publicIReadOnlyList<TModel>Models{get;init;}publicIReadOnlyList<HierarchyNode<TModel>>Groups{get;init;}}publicrecordQueryResultMeta(QueryResultMetaTotalTotal,QueryResultTypeType);publicrecordQueryResultMetaTotal(intRows,intPages);publicrecordHierarchyNode<TModel>(object?Key,intCount,IReadOnlyList<HierarchyNode<TModel>>?SubGroups,IReadOnlyList<TModel>?Items);See Results and Metadata.
publicstaticclassQueryBuilder{publicstaticQueryFluentNew();publicstaticQueryFluentSelect(paramsstring[]columns);publicstaticQueryFluentWhere(QueryCriteriacriteria);publicstaticQueryFluentSort(paramsSortDescriptor[]sorts);publicstaticQueryFluentGroupBy(paramsGroupByDescriptor[]groups);publicstaticQueryFluentPage(intsize,intnumber=1);}publicclassQueryFluent{publicQueryFluent();publicQueryFluent(Queryquery);publicQueryFluentSelect(paramsstring[]columns);publicQueryFluentWhere(QueryCriteriacriteria);publicQueryFluentSort(paramsSortDescriptor[]sorts);publicQueryFluentGroupBy(paramsGroupByDescriptor[]groups);publicQueryFluentPage(intsize,intnumber=1);publicQueryBuild();}See Fluent Builders.
publicstaticclassQueryValidationExtensions{publicstaticQueryValidate(thisQueryquery,Action<QueryValidationRules>configure,QueryValidationModemode=QueryValidationMode.SilentStrip);publicstaticQueryValidate(thisQueryquery,QueryValidationRulesrules,QueryValidationModemode=QueryValidationMode.SilentStrip);// Extension points used by provider-specific validators.publicstaticvoidApplyBaseRules(Queryquery,QueryValidationRulesrules,List<string>errors,QueryValidationModemode);publicstaticvoidThrowIfErrors(List<string>errors,QueryValidationModemode);}publicclassQueryValidationRules{publicQueryValidationRulesPageSize(Action<QueryPagingRuleBuilder>configure);publicQueryValidationRulesSelect(Action<QueryColumnRuleBuilder>configure);publicQueryValidationRulesSort(Action<QueryColumnRuleBuilder>configure);publicQueryValidationRulesGroupBy(Action<QueryColumnRuleBuilder>configure);publicQueryValidationRulesWhere(Action<QueryColumnRuleBuilder>configure);}publicclassQueryColumnRuleBuilder{publicQueryColumnRuleBuilderAllow(paramsstring[]columns);publicQueryColumnRuleBuilderDeny(paramsstring[]columns);}publicclassQueryPagingRuleBuilder{publicQueryPagingRuleBuilderMax(intmax);publicQueryPagingRuleBuilderMin(intmin);}publicclassQueryValidationException:Exception{publicIReadOnlyList<string>InvalidProperties{get;}publicQueryValidationException(stringmessage,IReadOnlyList<string>invalidProperties);}publicclassQueryColumnRule{}// rule state; configured through the builderpublicclassQueryPagingRule{}// rule state; configured through the builderSee Validation.
Namespace PepperX.QueryForge.Querying. These are the rules every provider routes through — public
so a custom provider can reuse them.
publicstaticclassConditionSemantics{publicstaticboolIsDisjunction(Logiclogic);// Or / OrNot → truepublicstaticboolIsNegated(Logiclogic);// AndNot / OrNot → truepublicstaticboolIsExecutable(Conditioncondition);// does this contribute a predicatepublicstaticboolIsPatternOperator(ConditionOperatorop);publicstaticobject?Unwrap(object?value);// JsonElement / DBNull → CLR value}publicstaticclassValueCoercion{publicstaticboolTryCoerce(object?value,TypetargetType,outobject?result);}publicsealedclassQueryValueComparer:IComparer<object?>{publicstaticreadonlyQueryValueComparerInstance;publicintCompare(object?x,object?y);publicboolAreEqual(object?x,object?y);}publicstaticclassHierarchyBuilder{publicstaticIReadOnlyList<HierarchyNode<TModel>>Build<TModel>(IReadOnlyList<TModel>rows,IReadOnlyList<GroupByDescriptor>groups,Func<TModel,string,object?>?valueAccessor=null);}publicstaticclassProjectionShaper{publicstaticTModelShape<TModel>(TModelsource,IReadOnlyList<string>selectColumns,IReadOnlyList<string>?alsoKeep=null);publicstaticIReadOnlyList<TModel>ShapeAll<TModel>(IReadOnlyList<TModel>rows,IReadOnlyList<string>selectColumns,IReadOnlyList<string>?alsoKeep=null);publicstaticIReadOnlyList<HierarchyNode<TModel>>ShapeHierarchy<TModel>(IReadOnlyList<HierarchyNode<TModel>>nodes,IReadOnlyList<string>selectColumns,IReadOnlyList<string>?alsoKeep=null);}publicstaticclassPropertyAccessor{publicstaticFunc<TModel,string,object?>For<TModel>();publicstaticboolExists<TModel>(string?columnName);}publicstaticclassInMemoryQueryEngine{publicstaticQueryResult<TModel>Apply<TModel>(IEnumerable<TModel>source,Queryquery,Func<TModel,string,object?>?valueAccessor=null);publicstaticboolMatches<TModel>(TModelrow,QueryCriteriacriteria,Func<TModel,string,object?>accessor,Func<string,bool>?columnExists=null);}See Query Semantics.
Depends on Dapper 2.1.79 and Microsoft.Extensions.DependencyInjection.Abstractions 10.0.9. No database driver.
Namespace PepperX.QueryForge.Dapper.
publicclassDapperQuery:PepperX.QueryForge.Query{publicDapperQueryObject?Object{get;set;}}publicrecordDapperQueryObject(stringName,stringSchema="",DapperObjectTypeType=DapperObjectType.Auto,IReadOnlyDictionary<string,object?>?Parameters=null);publicenumDapperObjectType{Auto=0,Table=1,View=2,TVF=3,SP=4}publicenumDapperDatabaseProvider{MSSQL,MySQL,PostgreSQL,Oracle,SQLite}publicinterfaceIDapperQueryService{Task<QueryResult<TModel>>QueryAsync<TModel>(IDbConnectionconnection,DapperQueryquery,int?commandTimeout=null,IDbTransaction?transaction=null);Task<QueryResult<TModel>>QueryAsync<TModel>(DapperQueryquery,int?commandTimeout=null,IDbTransaction?transaction=null);}publicstaticclassDapperQueryForgeConnectionExtensions{publicstaticTask<QueryResult<TModel>>QueryForgeAsync<TModel>(thisIDbConnectionconnection,DapperQueryquery,int?commandTimeout=null,IDbTransaction?transaction=null);}publicstaticclassDapperServiceCollectionExtensions{publicstaticIServiceCollectionAddQueryForgeDapper(thisIServiceCollectionservices,Action<DapperQueryForgeOptions>?configure=null);publicstaticIServiceCollectionAddQueryForgeDialect(thisIServiceCollectionservices,ISqlDialectdialect);}publicclassDapperQueryForgeOptions{publicFunc<IServiceProvider,IDbConnection>?ConnectionFactory{get;set;}}See Dapper Provider.
publicstaticclassDapperQueryBuilder{publicstaticDapperQueryFluentNew();publicstaticDapperQueryFluentNew(DapperQuerydapperQuery);publicstaticDapperQueryFluentFromBase(QuerybaseQuery);publicstaticDapperQueryFluentForObject(stringname,stringschema="",DapperObjectTypetype=DapperObjectType.Auto,IReadOnlyDictionary<string,object?>?parameters=null);publicstaticDapperQueryFluentSelect(paramsstring[]columns);publicstaticDapperQueryFluentWhere(QueryCriteriacriteria);publicstaticDapperQueryFluentSort(paramsSortDescriptor[]sorts);publicstaticDapperQueryFluentGroupBy(paramsGroupByDescriptor[]groups);publicstaticDapperQueryFluentPage(intsize,intnumber=1);}publicclassDapperQueryFluent:QueryFluent{publicDapperQueryFluent(DapperQueryquery);publicstaticDapperQueryFluentFromBase(QuerybaseQuery);publicDapperQueryFluentForObject(stringname,stringschema="",DapperObjectTypetype=DapperObjectType.Auto,IReadOnlyDictionary<string,object?>?parameters=null);publicnewDapperQueryFluentSelect(paramsstring[]columns);publicnewDapperQueryFluentWhere(QueryCriteriacriteria);publicnewDapperQueryFluentSort(paramsSortDescriptor[]sorts);publicnewDapperQueryFluentGroupBy(paramsGroupByDescriptor[]groups);publicnewDapperQueryFluentPage(intsize,intnumber=1);publicnewDapperQueryBuild();}Note DapperQueryBuilder is in the global namespace, so it needs no using beyond
PepperX.QueryForge.Dapper for its parameter types.
publicstaticclassDapperQueryValidationExtensions{publicstaticDapperQueryValidate(thisDapperQueryquery,Action<DapperQueryValidationRules>configure,QueryValidationModemode=QueryValidationMode.SilentStrip);}publicclassDapperQueryValidationRules:QueryValidationRules{publicDapperQueryValidationRulesObject(Action<DapperObjectRuleBuilder>configure);}publicclassDapperObjectRuleBuilder{publicDapperObjectRuleBuilderAllowSchema(paramsstring[]schemas);publicDapperObjectRuleBuilderDenySchema(paramsstring[]schemas);publicDapperObjectRuleBuilderAllowTable(paramsstring[]tables);publicDapperObjectRuleBuilderDenyTable(paramsstring[]tables);publicDapperObjectRuleBuilderRequireName(boolrequire=true);}publicclassDapperObjectRule{}// rule state; configured through the builderSee Validation.
Namespace PepperX.QueryForge.Dapper.Compiler.
publicsealedclassSqlQueryCompiler{publicSqlQueryCompiler(ISqlDialectdialect);publicISqlDialectDialect{get;}publicCompiledSqlCompileSchemaProbe(DapperQueryquery);publicCompiledSqlCompileRows(DapperQueryquery,ColumnWhitelistcolumns);publicCompiledSqlCompileRowCount(DapperQueryquery,ColumnWhitelistcolumns);publicCompiledSqlCompileGroupKeys(DapperQueryquery,ColumnWhitelistcolumns);publicCompiledSqlCompileGroupCount(DapperQueryquery,ColumnWhitelistcolumns);publicCompiledSqlCompileGroupRows(DapperQueryquery,ColumnWhitelistcolumns,IReadOnlyList<object?>groupKeys);}publicsealedrecordCompiledSql(stringText,IReadOnlyDictionary<string,object?>Parameters);publicsealedclassColumnWhitelist{publicColumnWhitelist(IEnumerable<string>columns);publicColumnWhitelist(IEnumerable<KeyValuePair<string,Type?>>columns);publicIReadOnlyCollection<string>Columns{get;}publicboolContains(string?columnName);publicType?TypeOf(string?columnName);}publicinterfaceISqlDialect{DapperDatabaseProviderProviderType{get;}stringDefaultSchema{get;}stringQuoteIdentifier(stringidentifier);stringParameterReference(stringname);stringPagingClause(intoffset,intsize);boolRequiresOrderByForPaging{get;}stringOrderByFallback{get;}stringNullOrdering(SortOrderorder);stringEscapeLikeValue(stringvalue);stringLikeEscapeClause{get;}boolSupportsTableValuedFunctions{get;}boolSupportsStoredProcedures{get;}stringBuildSource(stringschema,stringname,DapperObjectTypetype,IReadOnlyList<string>argumentReferences);stringBuildStoredProcedureCall(stringschema,stringname,IReadOnlyList<KeyValuePair<string,string>>argumentNames);}See Dapper: Generated SQL and Dapper: Dialects.
Namespace PepperX.QueryForge.Dapper.Dialects. All sealed, all parameterless, all stateless.
publicsealedclassSqlServerDialect:ISqlDialect{}publicsealedclassPostgreSqlDialect:ISqlDialect{}publicsealedclassMySqlDialect:ISqlDialect{}publicsealedclassOracleDialect:ISqlDialect{}publicsealedclassSqliteDialect:ISqlDialect{}Depends on Microsoft.EntityFrameworkCore 10.0.0.
namespacePepperX.QueryForge.EFCore;publicstaticclassQueryForgeQueryableExtensions{publicstaticTask<QueryResult<TModel>>ToQueryResultAsync<TModel>(thisIQueryable<TModel>source,Queryquery,CancellationTokencancellationToken=default);publicstaticIQueryable<TModel>ApplyQuery<TModel>(thisIQueryable<TModel>source,Queryquery);publicstaticIQueryable<TModel>ApplyFilter<TModel>(thisIQueryable<TModel>source,Queryquery);publicstaticIQueryable<TModel>ApplySort<TModel>(thisIQueryable<TModel>source,Queryquery);publicstaticIQueryable<TModel>ApplyPaging<TModel>(thisIQueryable<TModel>source,Queryquery);publicstaticIQueryable<TModel>ApplyProjection<TModel>(thisIQueryable<TModel>source,Queryquery,IReadOnlyList<string>?alsoKeep=null);}namespacePepperX.QueryForge.EFCore.Translation;publicstaticclassExpressionCompiler{publicstaticExpression<Func<TModel,bool>>?BuildPredicate<TModel>(QueryCriteriacriteria);publicstaticLambdaExpression?BuildSelector<TModel>(stringcolumnName);publicstaticExpression<Func<TModel,TModel>>?BuildProjection<TModel>(IReadOnlyList<string>selectColumns,IReadOnlyList<string>?alsoKeep=null);publicstaticLambdaExpression?BuildNullRank<TModel>(PropertyInfoproperty,boolnullsFirst);publicstaticExpression<Func<TKey,int>>?BuildKeyNullRank<TKey>(boolnullsFirst);publicstaticPropertyInfo?ResolveProperty<TModel>(string?columnName);}See EF Core Provider.
No dependencies beyond the core package.
namespacePepperX.QueryForge.InMemory;publicstaticclassInMemoryQueryExtensions{publicstaticQueryResult<TModel>ToQueryResult<TModel>(thisIEnumerable<TModel>source,Queryquery,Func<TModel,string,object?>?valueAccessor=null);publicstaticTask<QueryResult<TModel>>ToQueryResultAsync<TModel>(thisIEnumerable<TModel>source,Queryquery,Func<TModel,string,object?>?valueAccessor=null,CancellationTokencancellationToken=default);publicstaticIEnumerable<TModel>ApplyQuery<TModel>(thisIEnumerable<TModel>source,Queryquery,Func<TModel,string,object?>?valueAccessor=null);publicstaticIEnumerable<TModel>ApplyFilter<TModel>(thisIEnumerable<TModel>source,Queryquery,Func<TModel,string,object?>?valueAccessor=null);publicstaticIEnumerable<TModel>ApplySort<TModel>(thisIEnumerable<TModel>source,Queryquery,Func<TModel,string,object?>?valueAccessor=null);publicstaticIEnumerable<TModel>ApplyPaging<TModel>(thisIEnumerable<TModel>source,Queryquery);publicstaticIEnumerable<TModel>ApplyProjection<TModel>(thisIEnumerable<TModel>source,Queryquery);}publicstaticclassInMemoryAccessors{publicstaticFunc<TRow,string,object?>ForDictionary<TRow>()whereTRow:IReadOnlyDictionary<string,object?>;publicstaticFunc<TModel,string,object?>WithColumnMap<TModel>(IReadOnlyDictionary<string,string>columnToProperty);}See In-Memory Provider.
These are internal and are listed only so their names are recognisable in a stack trace. They are
not part of the public contract and can change without a major version.
| Type | Role |
|---|---|
DapperRegistry | holds one executor per engine; resolves by connection type name |
QueryExecutor | runs compiled statements and assembles the result |
SchemaCache | discovers and caches each object's column whitelist |
QueryForgeParameters | binds parameters and forces BindByName where the driver supports it |
DapperEngine | holds the registry backing the IDbConnection extension |
DapperQueryService | the IDapperQueryService implementation |
Test projects have InternalsVisibleTo; applications do not.
QueryForge · part of the PepperX Ecosystem · MIT licensed · packages 2.0.0, .NET 10