Pregunta

Estoy intentando mejorar mi vista de árbol en tiempo de ejecución desde una DataTable que se devuelve desde una consulta LINQ. Los campos devueltos son:

NAME = CaseNoteID | ContactoFecha | ParentNote TYPE = Guid | Fecha y hora | Guid

El campo ParentNote coincide con una entrada en la columna CaseNoteID. El Select (filtro) me está dando un error de tiempo de ejecución de No se puede encontrar la columna [ea8428e4]. Ese alfanumérico es la primera sección de una de las Guías. Cuando paso a través de mi filtro de código = " ParentNote = ea8428e4-1274-42e8-a31c-f57dc2f189a4 "

¿Qué me estoy perdiendo?

var tmpCNoteID = dr["CaseNoteID"].ToString();
                var filter = "ParentNote="+tmpCNoteID;

                DataRow[] childRows = cNoteDT.Select(filter);
¿Fue útil?

Solución

Intente incluir el GUID con comillas simples:

var filter = "ParentNote='"+tmpCNoteID+"'";

Otros consejos

esto debería funcionar:

   var tmpCNoteID = dr["CaseNoteID"].ToString();
                var filter = "ParentNote=\""+tmpCNoteID+"\"";

                DataRow[] childRows = cNoteDT.Select(filter);

Sé que este es un tema antiguo, pero quería agregarle un apéndice. Cuando se utiliza el operador IN con una Guid (por ejemplo, ParentNote IN (,, etc.), ya no se aceptan las comillas simples. En ese caso, el método CONVERT (sugerido por granadaCoder) es necesario. (Las comillas simples generan una excepción al comparar un Guid con una cadena con el operador '=' ... que en realidad no estamos usando).

Detalles: Heredé un código heredado que creó una cadena de filtro grande en el formato: MyColumn = '11111111-2222-3333-4444-555555555555' OR MyColumn = '11111111-2222 -3333-4444-555555555555 '....

Cuando el número de guías (y, por lo tanto, el número de cláusulas OR) llegó a ser demasiado grande, esto causó una excepción de desbordamiento de pila. Al reemplazar las numerosas cláusulas OR con una cláusula IN, pude establecer el filtro sin excepción. Pero usar una cláusula IN significa tener que usar el enfoque CONVERTIR.

Aquí hay un método que utilizo:

            MyStrongDataSet ds = new MyStrongDataSet();
            Guid myUuid = new Guid("11111111-2222-3333-4444-555555555555");

            System.Data.DataRow[] rows = ds.MyStrongTable.Select("MyGuidProperty = (CONVERT('" + myUuid.ToString("N") + "', 'System.Guid'))");


            //Fish out a single row if need be and cast to a strong row
            if (null != rows)
            {
                if (rows.Length > 0)
                {
                    MyStrongDataSet.MyStrongTableRow returnRow = rows[0] as MyStrongDataSet.MyStrongTableRow;
                    return returnRow;

                }
            }
            return null;

Aquí hay una ligera variación:

  string filterSql = "MyGuidProperty ='{0}'";

  filterSql = string.Format(filterSql, Guid.NewGuid().ToString("D"));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top