Pregunta

estoy consiguiendo "una excepción no controlada del tipo 'System.StackOverflowException' en system.data.dll" en mi propiedad DataView RowFilter. Hasta ahora no recibo ninguna traza de la pila para eso. Así puede alguien me ayuda en eso. A continuación el código donde obtengo el error en filterView.

                DataSet metalAttributeDS = LoadItemData();    //loads the static dataset
                DataTable metalDataTable = metalAttributeDS.Tables["FilterTable"];
                DataView metalfilterView = new DataView(metalDataTable);
                metalfilterView.ApplyDefaultSort = true;
                metalfilterView.RowFilter = queryBuilder +
                                            string.Format(
                                                " And AttributeName='Metal' and AttributeValueID in ({0})",
                                                string.Join(",", AttributeValueID.ToArray()));      //forms query condition dynamically.

                var res = from DataRowView rowView in metalfilterView select rowView["ItemID"].ToString();

                int countParam = 0;
                queryBuilder.AppendFormat(" and (");
                foreach (string id in res)
                {
                    countParam++;
                    queryBuilder.AppendFormat(" ItemID = '{0}'", id);
                    if (res.Count() > countParam)
                    {
                        queryBuilder.Append(" Or");
                    }
                }
                queryBuilder.Append(" )");
            }


            DataSet dataSet = LoadItemData();       //loads the static dataset
            DataTable dataTable = dataSet.Tables["FilterTable"];
            DataView filterView = new DataView(dataTable);
            filterView.ApplyDefaultSort = true;

                LogHelper.LogInfo(GetType(), "filterView.RowFilter");
                filterView.RowFilter = queryBuilder.ToString(); //      throws error

Gracias, Mehul Makwana.

¿Fue útil?

Solución 3

Tengo esta fijada con la ayuda de Aristos pero, lo hice pocas modificaciones a Aristos fragmento,

        foreach (string id in res)
                {
                    sbTheOr.Append(',');
                    Guid guid = new Guid(id);
                    sbTheOr.AppendFormat("Convert('{0}','System.Guid')",guid);
                }

                if (sbTheOr.Length > 0)
                {
                    // remove the first ,
                    sbTheOr.Remove(0, 1);
                    queryBuilder.AppendFormat(" and ItemID in ({0})",sbTheOr.ToString());
                }

Para que excepción de desbordamiento de pila era sólo debido a la enorme resultado. Y han encontrado algo nuevo al otro lado de esto que podemos utilizar RowFilter en la columna Guid usando Convert (expresión, tipo) sintaxis.

Gracias every1,

Mehul Makwana.

Otros consejos

Tal vez se crea una enorme línea con o, que no puede manejar ... Si intenta esto ...?

   StringBuilder sbTheOr = new StringBuilder();

    foreach (string id in res)
    {
        sbTheOr.Append(',');
        sbTheOr.Append(id);
    }


    if (sbTheOr.Length > 0)
    {
        // remove the first ,
        sbTheOr.Remove(0, 1);
        queryBuilder.AppendFormat(" and ItemID IN (" + sbTheOr.ToString() + ")");
    }

¿Puedes verificar lo que se está construyendo en 'QueryBuilder'? Creo que hay una posibilidad de algún 'Y' / 'O' / llave de apertura o de cierre que viene más al final.

simplificado la solución

 StringBuilder sb =new StringBuilder();
 res.ToList().ForEach(x => sb.Append(", " + String.Format("Convert('{0}','System.Guid')", new Guid(x))));
 var output = sb.ToString().Trim(',');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top