Datentabelle Wählen Sie() mit Guids
Ich versuche, abgekocht mein treeview zur Laufzeit aus einer DataTable zurückgegeben wird, die aus einer LINQ-Abfrage. Die zurückgegebenen Felder sind:
NAME = CaseNoteID | ContactDate | ParentNote
TYPE = Guid | DateTime | Guid
Den ParentNote Feld entspricht einem Eintrag in der CaseNoteID Spalte. Der Wählen Sie(filter) ist, dass Sie mir einen runtime error von Nicht finden, Spalte [ea8428e4]. Das alphanumerische, ist der erste Abschnitt von einer der Guids. Wenn ich durch mein code filter = "ParentNote=ea8428e4-1274-42e8-a31c-f57dc2f189a4"
Was bin ich?
var tmpCNoteID = dr["CaseNoteID"].ToString();
var filter = "ParentNote="+tmpCNoteID;
DataRow[] childRows = cNoteDT.Select(filter);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen umschließt die GUID mit einfachen Anführungszeichen:
sollte dies funktionieren :
Ich weiß, dies ist ein Alter thread, aber ich wollte noch hinzufügen einer Ergänzung zu. Bei Verwendung des IN-operators mit einer Guid (ex: ParentNote IN ( , , etc. ) ) dann einfache Anführungszeichen werden nicht mehr angenommen. In diesem Fall, die CONVERT-Methode (vorgeschlagen von granadaCoder) notwendig ist. (Single quotes eine Ausnahme auslösen, zum Vergleich eine Guid in einen string mit dem ' = ' - operator... die wir eigentlich nicht verwenden.)
Details: ich geerbt, einige legacy-code, der baute sich ein großes filter-string im format:
MyColumn = '11111111-2222-3333-4444-555555555555' OR MyColumn = '11111111-2222-3333-4444-555555555555' ....
Wenn die Anzahl der guids (und damit die Anzahl von ODER-Klauseln) habe zu groß zu sein, dies führte zu einem stack-überlauf Ausnahme. Durch den Austausch der zahlreichen ODER Klauseln mit einer IN-Klausel, ich war in der Lage, den filter ohne Ausnahme. Aber mit einer IN-Klausel bedeutet, dass das KONVERTIEREN Ansatz.
Hier ist eine Methode, die ich verwenden:
Hier ist eine leichte variation: