| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | using System;using System.Collections.Generic;using System.Text;namespace InABox.Core{    public interface IQueryProvider    {        bool ExcludeCustomProperties { get; set; }                CoreTable Query(IFilter? filter = null, IColumns? columns = null, ISortOrder? sort = null, CoreRange? range = null);    }    public interface IQueryProvider<T> : IQueryProvider    {        CoreTable Query(Filter<T>? filter = null, Columns<T>? columns = null, SortOrder<T>? sort = null, CoreRange? range = null);        void Query(Filter<T>? filter, Columns<T>? columns, SortOrder<T>? sort, CoreRange? range, Action<CoreTable?, Exception?> action);        void Save(T entity, string auditNote);        void Save(IEnumerable<T> entities, string auditNote);        void Save(T entity, string auditnote, Action<T, Exception?> callback);        void Save(IEnumerable<T> entities, string auditnote, Action<IEnumerable<T>, Exception?> callback);        void Delete(T entity, string auditNote);        void Delete(IEnumerable<T> entities, string auditNote);        void Delete(T entity, string auditnote, Action<T, Exception?> callback);        void Delete(IEnumerable<T> entities, string auditnote, Action<IList<T>, Exception?> callback);    }    public interface IQueryProviderFactory    {        bool ExcludeCustomProperties { get; }                IQueryProvider Create(Type T);        IQueryProvider<T> Create<T>()            where T : BaseObject, new()        {            var result = (Create(typeof(T)) as IQueryProvider<T>)!;            result.ExcludeCustomProperties = ExcludeCustomProperties;            return result;        }    }    public static class QueryProviderFactoryExtensions    {        public static CoreTable Query<T>(this IQueryProviderFactory factory, Filter<T>? filter = null, Columns<T>? columns = null, SortOrder<T>? sort = null, CoreRange? range = null)            where T : BaseObject, new()        {            return factory.Create<T>().Query(filter, columns, sort, range);        }        public static void Query<T>(this IQueryProviderFactory factory, Filter<T>? filter, Columns<T>? columns, SortOrder<T>? sort, CoreRange? range, Action<CoreTable?, Exception?> action)            where T : BaseObject, new()        {            factory.Create<T>().Query(filter, columns, sort, range, action);        }        public static void Save<T>(this IQueryProviderFactory factory, T entity, string auditNote)            where T : BaseObject, new()        {            factory.Create<T>().Save(entity, auditNote);        }        public static void Save<T>(this IQueryProviderFactory factory, IEnumerable<T> entities, string auditNote)            where T : BaseObject, new()        {            factory.Create<T>().Save(entities, auditNote);        }        public static void Delete<T>(this IQueryProviderFactory factory, T entity, string auditNote)            where T : BaseObject, new()        {            factory.Create<T>().Delete(entity, auditNote);        }    }}
 |