Frage

Ich versuche, meine treeview zur Laufzeit von einem Datatable boild, die von einer LINQ-Abfrage zurückgegeben wird. Die Felder zurückgekehrt sind:

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

Das ParentNote Feld entspricht einem Eintrag in der Spalte CaseNoteID. Die Select (Filter) gibt mir einen Laufzeitfehler von Kann finden Spalt nicht [ea8428e4]. Die alphanumerischen der erste Abschnitt eines des Guids ist. Wenn ich Schritt durch meinen Code filter = "ParentNote=ea8428e4-1274-42e8-a31c-f57dc2f189a4"

Was bin ich fehlt?

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

                DataRow[] childRows = cNoteDT.Select(filter);
War es hilfreich?

Lösung

Versuchen Sie, die GUID mit einfachen Anführungszeichen gesetzt:

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

Andere Tipps

Dies sollte funktionieren:

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

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

Ich weiß, das ist ein alter Thread, aber ich wollte einen Zusatz, um es hinzuzufügen. Wenn der IN-Operator mit einer Guid verwenden (zB: ParentNote IN (, usw.)), dann werden keine Apostrophe mehr akzeptiert. In diesem Fall ist die Methode CONVERT (vorgeschlagen von granadaCoder) erforderlich. (Einfache Anführungszeichen heben eine Ausnahme über eine GUID in eine Zeichenkette mit dem ‚=‘ Operator Vergleich ..., die wir eigentlich nicht verwenden.)

Details: ich einige Legacy-Code geerbt, die eine große Filterzeichenfolge im Format aufgebaut: MyColumn = '11111111-2222-3333-4444-555555555555' OR MyColumn = '11111111-2222-3333-4444-555555555555' ....

Wenn die Anzahl der guids (und damit die Anzahl der OR-Klauseln) bekam zu groß sein, verursacht dies einen Stapelüberlauf Ausnahme. Durch das Ersetzen der zahlreichen OR-Klauseln mit einer IN-Klausel war ich in der Lage, die Filter zu setzen, ohne eine Ausnahme. Jedoch unter Verwendung einer IN-Klausel bedeutet den CONVERT Ansatz zu verwenden.

Hier ist eine Methode, die ich verwende:

            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;

Hier ist eine leichte Variation:

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

  filterSql = string.Format(filterSql, Guid.NewGuid().ToString("D"));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top