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); } } }
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); }
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); }
/// <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); }
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); } }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }
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)); }
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(" ")); }
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)); }
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 }
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(" ")); }
/// <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); }
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(" ")); }
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); }
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); }