Pergunta

Eu estou tentando boild minha treeview em tempo de execução de um DataTable que é retornado de uma consulta LINQ. O Campos retornou são:

NAME = CaseNoteID | ContactDate | ParentNote TYPE = Guid | DateTime | Guid

O campo ParentNote corresponder a uma entrada na coluna CaseNoteID. O Select (filtro) está me dando um erro de execução de Não é possível localizar coluna [ea8428e4]. Isso alfanumérico é a primeira seção de um dos Guids. Quando eu passo pelo meu filtro code = "ParentNote=ea8428e4-1274-42e8-a31c-f57dc2f189a4"

O que eu estou ausente?

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

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

Solução

Tente colocando o GUID com aspas simples:

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

Outras dicas

isso deve funcionar:

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

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

Eu sei que esta é uma discussão antiga, mas eu queria acrescentar uma adenda a ele. Ao usar o operador IN com um Guid (ex: ParentNote IN (,, etc.)), em seguida, aspas simples não são mais aceitos. Nesse caso, é necessário o método Convert (sugerido por granadaCoder). (As aspas simples gerar uma exceção sobre a comparação de um Guid para uma string com o operador '=' ... que realmente não está usando.)

Detalhes: Herdei algum código legado que construiu uma grande cadeia de filtro no formato: MyColumn = '11111111-2222-3333-4444-555555555555' OR MyColumn = '11111111-2222-3333-4444-555555555555' ....

Quando o número de guids (e, portanto, o número de cláusulas OR) tem que ser muito grande, isso causou uma exceção de estouro de pilha. Ao substituir as inúmeras cláusulas OR com uma cláusula IN, eu era capaz de definir o filtro sem uma exceção. Mas o uso de um meio cláusula ter que usar a abordagem converter.

Aqui é um método de uso I:

            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;

Aqui está uma pequena variação:

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

  filterSql = string.Format(filterSql, Guid.NewGuid().ToString("D"));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top