Example #1
0
        public void AddPropertyNullSingleProperty()
        {
            var    annon  = new { };
            string select = DynamicQueryable.AddProperties(annon.GetType(), typeof(SinglePropertyClass), new List <object>());

            Assert.AreEqual("new AutoPocoIO.test.Extensions.SinglePropertyClass()", select);
        }
        private void SeedData(IApplicationBuilder app)
        {
            using (var serviceScope = app.ApplicationServices.GetService <IServiceScopeFactory>().CreateScope())
            {
                var configurationContext = serviceScope.ServiceProvider.GetRequiredService <ConfigurationDbContext>();

                if (!DynamicQueryable.Any(configurationContext.ApiResources))
                {
                    // In the simple case an API has exactly one scope. But there are cases where you might want to sub-divide the functionality of an API, and give different clients access to different parts.
                    configurationContext.ApiResources.Add(new ApiResource()
                    {
                        Enabled = true,
                        Scopes  = new List <ApiScope>()
                        {
                            new ApiScope()
                            {
                                Name        = "nop_api",
                                DisplayName = "nop_api"
                            }
                        },
                        Name = "nop_api"
                    });

                    configurationContext.SaveChanges();

                    TryRunUpgradeScript(configurationContext);
                }
            }
        }
Example #3
0
        public void AddPropertySinglePropertyWithCast()
        {
            var    annon  = new { Id = (int?)1 };
            string select = DynamicQueryable.AddProperties(annon.GetType(), typeof(SinglePropertyClass), new List <object>());

            Assert.AreEqual("new AutoPocoIO.test.Extensions.SinglePropertyClass(Int32(Id == null ? @0 : Id) as Id)", select);
        }
Example #4
0
        private void Login(object sender, EventArgs e)
        {
            BaseControl.OpenForm(new LoginForm(), true);
            if (BaseControl.UserId > 0)
            {
                VisibleMenuItem(true);
                LoginButtons(false);

                tsDate.Text      = DateTime.Now.ToString("dddd, yyyy-MMM-d");
                tsUser.Text      = BaseControl.UserLogin;
                tsCorporate.Text = BaseControl.CorporateName;

                var runningText = new RunningTextDataManager().GetRunningText(WhereTerm.Default(1, "announcement_type", EnumSqlOperator.Equals));
                var text        = ConfigurationManager.AppSettings["DefaultAnnouncement"];
                if (DynamicQueryable.Any(runningText))
                {
                    var rFranchise = runningText.FirstOrDefault(r => r.CorporateId == BaseControl.CorporateId);
                    if (rFranchise != null)
                    {
                        text = rFranchise.Name;
                    }
                    var rDate = runningText.FirstOrDefault(r => r.FromDate >= DateTime.Now && r.ToDate <= DateTime.Now && r.FromHour >= DateTime.Now.Hour && r.FromMinute >= DateTime.Now.Minute && r.ToHour <= DateTime.Now.Minute && r.ToMinute <= DateTime.Now.Minute);
                    if (rDate != null)
                    {
                        text = rDate.Name;
                    }
                }
                tsAnnouncement.MarqueeText = text;
                tsAnnouncement.Interval    = 300;

                Authorization.FilterToolstripMenu(ms.Items);
            }
        }
        public static string GetSelectSql <TModel>(ObjectQuery <TModel> query, IEnumerable <string> selectedProperties, DbCommand command = null,
                                                   IBatchRunner runner = null, IList <string> fields = null)
        {
            if (selectedProperties == null || selectedProperties.Count() < 1)
            {
                throw new ArgumentException("The selected properties must be defined.", "selectedProperties");
            }

            var selector    = new StringBuilder(string.Join(",", selectedProperties)).Insert(0, "new (").Append(")");
            var selectQuery = DynamicQueryable.Select(query, selector.ToString());
            var objectQuery = selectQuery as ObjectQuery;

            if (objectQuery == null)
            {
                throw new ArgumentException("The query must be of type ObjectQuery.", "query");
            }

            string selectSql = objectQuery.ToTraceString();

            if (command != null)
            {
                objectQuery.Parameters.CopyTo(command, runner: runner);
            }

            if (fields != null)
            {
                GetPropertyPositions(selectQuery, fields);
            }

            return(selectSql);
        }
Example #6
0
        /// <summary>
        /// 获取分页信息,不使用Mapper
        /// </summary>
        /// <typeparam name="TEntityOrView"></typeparam>
        /// <param name="query"></param>
        /// <param name="pagedInputDto"></param>
        /// <returns></returns>
        public static async Task <MyPagedResult <TEntityOrView> > GetPageEntityOrViewAsync <TEntityOrView>(this IQueryable <TEntityOrView> query, PagedInputDto pagedInputDto) where TEntityOrView : class
        {
            query = EntityFrameworkQueryableExtensions.AsNoTracking <TEntityOrView>(query);
            //排序
            if (!string.IsNullOrEmpty(pagedInputDto.Order))
            {
                List <string> strList = pagedInputDto.Order.Split(new char[1]
                {
                    ','
                }).ToList();
                for (int i = 0; i < strList.Count; i++)
                {
                    query = ((i != 0) ? ((!strList[i].ToLower().Contains("desc")) ? DynamicQueryable.OrderBy <TEntityOrView>(query, pagedInputDto.Order, Array.Empty <object>()) : DynamicQueryable.ThenByDescending <TEntityOrView>(query, pagedInputDto.Order, Array.Empty <object>())) : ((!strList[i].ToLower().Contains("desc")) ? DynamicQueryable.OrderBy <TEntityOrView>(query, pagedInputDto.Order, Array.Empty <object>()) : DynamicQueryable.OrderByDescending <TEntityOrView>(query, pagedInputDto.Order, Array.Empty <object>())));
                }
            }
            if (pagedInputDto.Filter != null)
            {
                string   text  = pagedInputDto.Filter.ToWhere();
                object[] array = pagedInputDto.Filter.paramValues.ToArray();
                query = DynamicQueryable.Where <TEntityOrView>(query, text, array);
            }
            IQueryable <TEntityOrView> queryable = query.Skip(pagedInputDto.SkipCount).Take(pagedInputDto.PageSize);

            List <TEntityOrView> dataList = await EntityFrameworkQueryableExtensions.ToListAsync <TEntityOrView>(queryable, default(CancellationToken));

            MyPagedResult <TEntityOrView> obj = new MyPagedResult <TEntityOrView>();

            obj.PageSize  = pagedInputDto.PageSize;
            obj.PageIndex = pagedInputDto.PageIndex;
            obj.DataList  = dataList;
            obj.RowCount  = query.Count();
            return(obj);
        }
Example #7
0
        private void Carpeta_simpleButton_Click(object sender, EventArgs e)
        {
            var configuracion = DynamicQueryable.FirstOrDefault(AGlobalDataContext.ConfiguracionGeneral);
            //Conformo el nombre d la carpeta,

            var anno           = ConfiguracionGeneral.Anno;
            var numeroContrato = GlobalControlClientes.NumeroContrato;
            var entidad        = NombreEntidad_textEdit.EditValue;
            var camino         = GlobalControlClientes.EsNacional
                ? configuracion.CaminoContratosNacionales
                : configuracion.CaminoContratoInternacionales;

            if (numeroContrato == 0)
            {
                MessageBox.Show("El contrato debe ser salvado con anterioridad");
                return;
            }
            var nombreCarpeta = string.Format("{0}-{1}-{2}", numeroContrato, anno, entidad);

            //creo la carpeta
            try
            {
                string rutaCompleta = string.Format("{0}\\{1}", camino, nombreCarpeta);
                if (!GlobalControlClientes.EsNacional)
                {
                    rutaCompleta += " " + GlobalControlClientes.ProyectoAsociadoString.ToString().CleanInput();
                }

                if (Directory.Exists(rutaCompleta))
                {
                    if (MessageBox.Show("La Carpeta ya existe, Desea abrirla?", "Exito", MessageBoxButtons.YesNo) ==
                        DialogResult.Yes)
                    {
                        Process.Start("Explorer.exe", rutaCompleta);
                    }
                    return;
                }
                DirectoryInfo info = Directory.CreateDirectory(rutaCompleta);
                if (!info.Exists)
                {
                    MessageBox.Show(
                        "Problemas al crear la carpeta, verifique que usted tenga permisos para escribir en la ruta configurada o contacte al administrador de sistemas");
                }
                else
                {
                    //MessageBox.Show("Carpeta creada correctamente");
                    if (
                        MessageBox.Show("Carpeta creada correctamente, Desea abrirla?", "Exito", MessageBoxButtons.YesNo) ==
                        DialogResult.Yes)
                    {
                        Process.Start("Explorer.exe", rutaCompleta);
                    }
                }
            }
            catch (Exception b)
            {
                MessageBox.Show(b.Message);
            }
        }
Example #8
0
 /// <summary>
 /// 多字段排序
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="Sour"></param>
 /// <param name="SortExpression"></param>
 /// <param name="values"></param>
 /// <returns></returns>
 public static IQueryable <T> OrderBy <T>(this IQueryable <T> Sour, string SortExpression, params object[] values)
 {
     if (Sour == null)
     {
         throw new ArgumentException("操作对象为null");
     }
     return(DynamicQueryable.OrderBy(Sour, SortExpression, values));
 }
Example #9
0
 /// <summary>
 /// 排序
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="query"></param>
 /// <param name="ordering">排序字符串,如:OrderBy("id desc,name ase")</param>
 /// <param name="values"></param>
 /// <returns></returns>
 public static IQueryable <T> OrderBy <T>(this IQueryable <T> query, string ordering, params object[] values)
 {
     if (query == null)
     {
         throw new ArgumentNullException("query");
     }
     return(DynamicQueryable.OrderBy(query, ordering, values));
 }
Example #10
0
        /// <summary>
        /// IQueryable{T}에 Between 조건을 추가합니다.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="query"></param>
        /// <param name="expr"></param>
        /// <param name="lo"></param>
        /// <param name="hi"></param>
        /// <returns></returns>
        public static IQueryable <T> AddBetween <T>(this IQueryable <T> query, Expression <Func <T, object> > expr, object lo, object hi)
        {
            query.ShouldNotBeNull("query");

            var propertyName = ExpressionProcessor.FindMemberExpression(expr.Body);
            var betweenExpr  = IsBetweenExpression(propertyName);

            return(DynamicQueryable.Where(query, betweenExpr, lo, hi));
        }
Example #11
0
        /// <summary>
        /// 속성 < <paramref name="current"/> 인 질의를 추가합니다. (값이  <paramref name="current"/>보다 작다면, 이미 지나간 시간이라는 뜻)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="query"></param>
        /// <param name="current"></param>
        /// <param name="expr"></param>
        /// <returns></returns>
        public static IQueryable <T> AddIsElapsed <T>(this IQueryable <T> query, DateTime current, Expression <Func <T, object> > expr)
        {
            query.ShouldNotBeNull("query");
            expr.ShouldNotBeNull("expr");

            var propertyName = ExpressionProcessor.FindMemberExpression(expr.Body);

            return(DynamicQueryable.Where(query, propertyName + " < @0", current));
        }
        public virtual IQueryable <TEntity> GetMany(string where1, object[] whereParameters, Expression <Func <TEntity, bool> > where2, string orderBy, int totalNumber)
        {
            IQueryable <TEntity> queryable = DynamicQueryable.Where <TEntity>(this.Selector, where1, whereParameters);

            if (where2 != null)
            {
                queryable = queryable.Where(where2);
            }
            return(DynamicQueryable.OrderBy <TEntity>(queryable, orderBy, new object[0]).Take(totalNumber));
        }
Example #13
0
        /// <summary>
        /// 지정한 속성 값이 NULL이면 True로 간주하는 Where 절을 추가한다.
        /// Explicit 하게 PropertyName = False 로 되어 있는 것을 제외한 True이거나 NULL 것은 True 로 간주한다.
        /// </summary>
        public static IQueryable <T> AddNullAsTrue <T>(this IQueryable <T> query, Expression <Func <T, object> > expr, bool?value)
        {
            var propertyName = ExpressionProcessor.FindMemberExpression(expr.Body);

            if (value.GetValueOrDefault(true) == false)
            {
                return(DynamicQueryable.Where(query, propertyName + " == @0", false));
            }

            return(AddEqIncludeNull(query, expr, true));
        }
Example #14
0
        /// <summary>
        /// IQueryable{T}에 InRange 조건을 추가합니다.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="query"></param>
        /// <param name="value"></param>
        /// <param name="loExpr"></param>
        /// <param name="hiExpr"></param>
        /// <returns></returns>
        public static IQueryable <T> AddInRange <T>(this IQueryable <T> query, object value, Expression <Func <T, object> > loExpr,
                                                    Expression <Func <T, object> > hiExpr)
        {
            query.ShouldNotBeNull("query");

            var loPropertyName = ExpressionProcessor.FindMemberExpression(loExpr.Body);
            var hiPropertyName = ExpressionProcessor.FindMemberExpression(hiExpr.Body);
            var isInRangeExpr  = IsInRangeExpression(loPropertyName, hiPropertyName);

            return(DynamicQueryable.Where(query, isInRangeExpr, value));
        }
Example #15
0
        /// <summary>
        /// 값이 null 이라면 "속성 IS NULL" 을, 값이 있다면, "속성 = value" 라는 질의를 추가합니다.
        /// (예: value가 'RealWeb'인 경우 Company='RealWeb', value가 null인 경우 Company IS NULL)
        /// </summary>
        public static IQueryable <T> AddEqOrNull <T>(this IQueryable <T> query, Expression <Func <T, object> > expr, object value)
        {
            query.ShouldNotBeNull("query");
            expr.ShouldNotBeNull("expr");

            var propertyName = ExpressionProcessor.FindMemberExpression(expr.Body);

            var exprString = (value != null) ? propertyName + " == @0" : propertyName + " == null";

            return(DynamicQueryable.Where(query, exprString, value));
        }
Example #16
0
        /// <summary>
        /// 지정된 속성이 지정된 값과 같거나, 속성 값이 NULL인 경우 (예: Name=:Name OR Name IS NULL)
        /// </summary>
        public static IQueryable <T> AddEqIncludeNull <T>(this IQueryable <T> query, Expression <Func <T, object> > expr, object value)
        {
            query.ShouldNotBeNull("query");
            expr.ShouldNotBeNull("expr");

            var proeprtyName = ExpressionProcessor.FindMemberExpression(expr.Body);

            var exprString = string.Format("{0}==@0 || {0} == null", proeprtyName);

            return(DynamicQueryable.Where(query, exprString, value));
        }
Example #17
0
        public static IQueryable <T> Where <T>(this IQueryable <T> source, string predicate, params object[] args)
        {
            if (source == null)
            {
                return(source);
            }

            if (string.IsNullOrEmpty(predicate))
            {
                return(source);
            }

            return(DynamicQueryable.Where(source, predicate, args));
        }
Example #18
0
        private static Proyectos GetUltimoProyecto()
        {
            NegocioDataContext   aDataContext  = new NegocioDataContext();
            ConfiguracionGeneral configuracion = DynamicQueryable.FirstOrDefault(aDataContext.ConfiguracionGeneral);
            var proyectosdelAnno = aDataContext.Proyectos.Where(c => c.Anno == configuracion.AnnoDeTrabajo);

            if (DynamicQueryable.Any(proyectosdelAnno))
            {
                Proyectos ultimoProyecto =
                    DynamicQueryable.FirstOrDefault(proyectosdelAnno.OrderByDescending(c => c.Consecutivo));
                return(ultimoProyecto);
            }
            return(null);
        }
        public static IQueryable <T> OrderBy <T>(this IQueryable <T> source, string sortExpression)
        {
            if (source == null)
            {
                throw new ArgumentNullException(nameof(source), "source is null.");
            }

            if (string.IsNullOrEmpty(sortExpression))
            {
                throw new ArgumentException("sortExpression is null or empty.", nameof(sortExpression));
            }

            return(DynamicQueryable.OrderBy(source, sortExpression.Replace("__", ".")));
        }
        public virtual IQueryable <TEntity> GetMany(string where, object[] whereParameters, string orderBy)
        {
            IQueryable <TEntity> result;

            if (orderBy != null)
            {
                result = DynamicQueryable.OrderBy <TEntity>(DynamicQueryable.Where <TEntity>(this.Selector, where, whereParameters), orderBy, new object[0]);
            }
            else
            {
                result = DynamicQueryable.Where <TEntity>(this.Selector, where, whereParameters);
            }
            return(result);
        }
        public void OrderBy_Exceptions()
        {
            //Arrange
            var testList = User.GenerateSampleModels(100, allowNullableProfiles: true);
            var qry      = testList.AsQueryable();

            //Act
            Assert.Throws <ParseException>(() => qry.OrderBy("Bad=3"));
            Assert.Throws <ParseException>(() => qry.Where("Id=123"));

            Assert.Throws <ArgumentNullException>(() => DynamicQueryable.OrderBy(null, "Id"));
            Assert.Throws <ArgumentNullException>(() => qry.OrderBy(null));
            Assert.Throws <ArgumentException>(() => qry.OrderBy(""));
            Assert.Throws <ArgumentException>(() => qry.OrderBy(" "));
        }
Example #22
0
        public static IQueryable <T> OrderBy <T>(this IQueryable <T> source, string sortExpression)
        {
            if (source == null)
            {
                return(source);
            }

            if (string.IsNullOrEmpty(sortExpression))
            {
                return(source);
            }


            return(DynamicQueryable.OrderBy(source, sortExpression));
        }
Example #23
0
        private void Cueentas_gridView_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
        {
            var cuenta = (CuentasBancariasDeCliente)e.Row;
            //obtengo una cuenta que tenga la misma moneda si existe tambien devuelvo falso de lo contrario true
            var cuentaDiferenteConIgualMoneda =
                AGlobalDataContext.CuentasBancariasDeCliente.Where(c => c.ControlClienteId == AControlClientesId && c.TipoMonedaId == cuenta.TipoMonedaId && c.CuentaBancariaID != cuenta.CuentaBancariaID);

            e.Valid = !DynamicQueryable.Any(cuentaDiferenteConIgualMoneda);
            if (e.Valid)
            {
                return;
            }
            e.ErrorText = "No pueden haber dos cuentas para la misma moneda, Desea Corregir el valor ?";
            Cuentas_gridView.SetColumnError(colTipoMonedaId, "No pueden haber dos cuentas para la misma moneda");
            //Si se esta actualizando una cuenta y coincide que ya habia otra cuenta configurada con la misma moneda no lo permito
        }
Example #24
0
        public void Where_Exceptions()
        {
            //Arrange
            var testList = User.GenerateSampleModels(100, allowNullableProfiles: true);
            var qry      = testList.AsQueryable();

            //Act
            Helper.ExpectException <ParseException>(() => qry.Where("Id"));
            Helper.ExpectException <ParseException>(() => qry.Where("Bad=3"));
            Helper.ExpectException <ParseException>(() => qry.Where("Id=123"));

            Helper.ExpectException <ArgumentNullException>(() => DynamicQueryable.Where(null, "Id=1"));
            Helper.ExpectException <ArgumentNullException>(() => qry.Where(null));
            Helper.ExpectException <ArgumentException>(() => qry.Where(""));
            Helper.ExpectException <ArgumentException>(() => qry.Where(" "));
        }
Example #25
0
        /// <summary>
        /// 带mapper
        /// </summary>
        /// <typeparam name="TEntityOrView"></typeparam>
        /// <typeparam name="TDto"></typeparam>
        /// <param name="query"></param>
        /// <param name="pagedInputDto"></param>
        /// <param name="configurationProvider"></param>
        /// <returns></returns>
        public static async Task <MyPagedResult <TDto> > GetPageAsync <TEntityOrView, TDto>(this IQueryable <TEntityOrView> query, PagedInputDto pagedInputDto) where TEntityOrView : class where TDto : class
        {
            query = EntityFrameworkQueryableExtensions.AsNoTracking <TEntityOrView>(query);
            //排序
            if (!string.IsNullOrEmpty(pagedInputDto.Order))
            {
                List <string> strList = pagedInputDto.Order.Split(new char[1]
                {
                    ','
                }).ToList();
                for (int i = 0; i < strList.Count; i++)
                {
                    query = ((i != 0) ? ((!strList[i].ToLower().Contains("desc")) ? DynamicQueryable.OrderBy <TEntityOrView>(query, pagedInputDto.Order, Array.Empty <object>()) : DynamicQueryable.ThenByDescending <TEntityOrView>(query, pagedInputDto.Order, Array.Empty <object>())) : ((!strList[i].ToLower().Contains("desc")) ? DynamicQueryable.OrderBy <TEntityOrView>(query, pagedInputDto.Order, Array.Empty <object>()) : DynamicQueryable.OrderByDescending <TEntityOrView>(query, pagedInputDto.Order, Array.Empty <object>())));
                }
            }
            //if (!string.IsNullOrEmpty(pagedInputDto.Order))
            //{
            //    query = DynamicQueryable.OrderBy<TEntityOrView>(query, pagedInputDto.Order, Array.Empty<object>());
            //}
            if (pagedInputDto.Filter != null)
            {
                string   text  = pagedInputDto.Filter.ToWhere();
                object[] array = pagedInputDto.Filter.paramValues.ToArray();
                query = DynamicQueryable.Where <TEntityOrView>(query, text, array);
            }
            IQueryable <TEntityOrView> queryable = query.Skip(pagedInputDto.SkipCount).Take(pagedInputDto.PageSize);

            IQueryable <TDto> queryable2;

            if (!string.IsNullOrEmpty(pagedInputDto.Select))
            {
                queryable2 = DynamicQueryable.Select(queryable, pagedInputDto.Select, Array.Empty <object>()).Cast <TDto>();
            }
            else
            {
                queryable2 = Extensions.ProjectTo <TDto>(queryable, (AutoMapper.IConfigurationProvider)pagedInputDto.configurationProvider, Array.Empty <Expression <Func <TDto, object> > >());
            }
            List <TDto> dataList = await EntityFrameworkQueryableExtensions.ToListAsync <TDto>(queryable2, default(CancellationToken));

            MyPagedResult <TDto> obj = new MyPagedResult <TDto>();

            obj.PageSize  = pagedInputDto.PageSize;
            obj.PageIndex = pagedInputDto.PageIndex;
            obj.DataList  = dataList;
            obj.RowCount  = query.Count();
            return(obj);
        }
Example #26
0
        private void gridView1_InitNewRow(object sender, DevExpress.XtraGrid.Views.Grid.InitNewRowEventArgs e)
        {
            var monedasUsadas = AGlobalDataContext.CuentasBancariasDeCliente.Where(c => c.ControlClienteId == AGlobalControlClientes.ControlClienteID).Select(d => d.TipoMonedaId);

            int[] monedasIds = new int[DynamicQueryable.Count(monedasUsadas)];
            int   i          = 0;

            foreach (var monedaUsada    in monedasUsadas)
            {
                monedasIds[i] = monedaUsada;
                i++;
            }


            TipoMoneda_repositoryItemLookUpEdit.DataSource = AGlobalDataContext.TipoMoneda.Where(c => !monedasIds.Contains(c.TipoMonedaID));
            TipoMoneda_repositoryItemLookUpEdit.ForceInitialize();
            gridView1.SetRowCellValue(e.RowHandle, colControlClienteId, AGlobalControlClientes.ControlClienteID);
        }
        public void Select_Exceptions()
        {
            //Arrange
            var testList = User.GenerateSampleModels(100, allowNullableProfiles: true);
            var qry      = testList.AsQueryable();

            //Act
            Assert.Throws <ParseException>(() => qry.Select("Bad"));
            Assert.Throws <ParseException>(() => qry.Select("Id, UserName"));
            Assert.Throws <ParseException>(() => qry.Select("new Id, UserName"));
            Assert.Throws <ParseException>(() => qry.Select("new (Id, UserName"));
            Assert.Throws <ParseException>(() => qry.Select("new (Id, UserName, Bad)"));

            Assert.Throws <ArgumentNullException>(() => DynamicQueryable.Select(null, "Id"));
            Assert.Throws <ArgumentNullException>(() => qry.Select(null));
            Assert.Throws <ArgumentException>(() => qry.Select(""));
            Assert.Throws <ArgumentException>(() => qry.Select(" "));
        }
Example #28
0
        public virtual void testQueryWithReadPermissionOnOneTaskProcess()
        {
            // given
            createGrantAuthorization(Resources.ProcessDefinition, ONE_TASK_PROCESS_KEY, userId, Permissions.Read);

            // when
            IQueryable <IProcessDefinitionStatistics> query = managementService.CreateProcessDefinitionStatisticsQuery();

            // then
            //verifyQueryResults(query, 1);

            IProcessDefinitionStatistics statistics = query.First();

            Assert.AreEqual(ONE_TASK_PROCESS_KEY, statistics.Key);
            Assert.AreEqual(0, statistics.Instances);
            Assert.AreEqual(0, statistics.FailedJobs);
            Assert.True(!DynamicQueryable.Any(statistics.IncidentStatistics));
        }
        private static string GetSelectSql <TEntity>(ObjectQuery <TEntity> query, EntityMap entityMap, out List <SqlParameter> sqlParams)
            where TEntity : class
        {
            // TODO change to esql?

            // changing query to only select keys
            var selector = new StringBuilder(50);

            selector.Append("new(");
            foreach (var propertyMap in entityMap.KeyMaps)
            {
                if (selector.Length > 4)
                {
                    selector.Append((", "));
                }

                selector.Append(propertyMap.PropertyName);
            }
            selector.Append(")");

            var selectQuery = DynamicQueryable.Select(query, selector.ToString());
            var objectQuery = selectQuery as ObjectQuery;

            if (objectQuery == null)
            {
                throw new ArgumentException("The query must be of type ObjectQuery.", "query");
            }

            string innerJoinSql = objectQuery.ToTraceString();

            sqlParams = new List <SqlParameter>();

            // create parameters
            foreach (var objectParameter in objectQuery.Parameters)
            {
                var parameter = new SqlParameter();
                parameter.ParameterName = objectParameter.Name;
                parameter.Value         = objectParameter.Value ?? DBNull.Value;

                sqlParams.Add(parameter);
            }

            return(innerJoinSql);
        }
Example #30
0
        public static string GetSelectSql <TModel>(ObjectQuery <TModel> query, IEnumerable <string> selectedProperties, DbCommand command = null,
                                                   IBatchRunner runner = null, IList <string> fields = null)
        {
            if (selectedProperties == null || selectedProperties.Count() < 1)
            {
                throw new ArgumentException("The selected properties must be defined.", "selectedProperties");
            }

            var selector    = new StringBuilder(string.Join(",", selectedProperties)).Insert(0, "new (").Append(")");
            var selectQuery = DynamicQueryable.Select(query, selector.ToString());
            var objectQuery = selectQuery as ObjectQuery;

            if (objectQuery == null)
            {
                throw new ArgumentException("The query must be of type ObjectQuery.", "query");
            }

            string selectSql = objectQuery.ToTraceString();

            if (command != null)
            {
                objectQuery.Parameters.CopyTo(command, runner: runner);
            }

            if (fields != null)
            {
                fields.Clear();
                var maps = new NonPublicMember(objectQuery).GetProperty("QueryState").GetField("_cachedPlan").GetField("CommandDefinition")
                           .GetField("_columnMapGenerators").Idx(0).GetField("_columnMap").GetProperty("Element").GetProperty("Properties").Value as Array;
                foreach (var m in maps)
                {
                    var    mm   = new NonPublicMember(m);
                    int    pos  = (int)mm.GetProperty("ColumnPos").Value;
                    string name = (string)mm.GetProperty("Name").Value;
                    while (pos + 1 > fields.Count)
                    {
                        fields.Add(null);
                    }
                    fields[pos] = name;
                }
            }

            return(selectSql);
        }