Question

J'essaie de créer une arborescence au moment de l'exécution à partir d'un DataTable renvoyé par une requête LINQ. Les champs renvoyés sont:

NAME = CaseNoteID | ContactDate | Note de parenté TYPE = Guid | DateTime | Guid

Le champ ParentNote correspond à une entrée de la colonne CaseNoteID. Le filtre (filtre) me donne une erreur d’exécution Impossible de trouver la colonne [ea8428e4]. Cet élément alphanumérique est la première section de l’un des guides. Lorsque je passe à travers mon code filter = "ParentNote = ea8428e4-1274-42e8-a31c-f57dc2f189a4"

Qu'est-ce qui me manque?

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

                DataRow[] childRows = cNoteDT.Select(filter);
Était-ce utile?

La solution

Essayez de placer le GUID entre guillemets simples:

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

Autres conseils

cela devrait fonctionner:

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

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

Je sais que c'est un vieux fil, mais je voulais y ajouter un addendum. Lorsque vous utilisez l'opérateur IN avec un Guid (ex: ParentNote IN (,, etc.)), les guillemets simples ne sont plus acceptés. Dans ce cas, la méthode CONVERT (suggérée par granadaCoder) est nécessaire. (Les guillemets simples soulèvent une exception concernant la comparaison d'un Guid à une chaîne avec l'opérateur '=' ... que nous n'utilisons pas en réalité.)

Détails: j'ai hérité d'un code hérité qui créait une chaîne de filtrage importante au format: MyColumn = '11111111-2222-3333-4444-555555555555' OU MyColumn = '11111111-2222 -3333-4444-555555555555 '....

Lorsque le nombre d'instructions (et donc le nombre de clauses OR) est trop important, une exception de débordement de pile est générée. En remplaçant les nombreuses clauses OR par une clause IN, j'ai pu définir le filtre sans exception. Mais utiliser une clause IN signifie que vous devez utiliser l’approche CONVERT.

Voici une méthode que j'utilise:

            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;

Voici une légère variation:

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

  filterSql = string.Format(filterSql, Guid.NewGuid().ToString("D"));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top