سؤال

أنا أحاول أن boild بلدي treeview في وقت التشغيل من DataTable التي يتم إرجاعها من استعلام LINQ.مجالات عاد هي:

NAME = CaseNoteID | ContactDate | ParentNote TYPE = Guid | التاريخ والوقت | Guid

على ParentNote مجال يطابق الإدخال في CaseNoteID العمود.اختر(تصفية) يعطيني خطأ في وقت التشغيل من لا يمكن العثور على عمود [ea8428e4]. أن أبجدية هو القسم الأول من أحد المعرفات العامة الفريدة Guid.عندما كنت خطوة من خلال قانون بلدي filter = "ParentNote=ea8428e4-1274-42e8-a31c-f57dc2f189a4"

ما أنا في عداد المفقودين ؟

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

                DataRow[] childRows = cNoteDT.Select(filter);
هل كانت مفيدة؟

المحلول

محاولة أرفق GUID مع علامات الاقتباس المفردة:

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

نصائح أخرى

هذا يجب أن تعمل :

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

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

أعرف أن هذا هو الموضوع القديم, ولكن أردت أن تضيف إضافة إلى ذلك.عند استخدام في المشغل مع Guid (السابقين:ParentNote في (,,.... الخ) ) ثم علامات الاقتباس المفردة لم تعد مقبولة.في هذه الحالة أسلوب تحويل (اقترح granadaCoder) ضروري.(علامات الاقتباس المفردة رفع استثناء عن مقارنة Guid إلى سلسلة مع '=' المشغل...ونحن في الواقع لا تستخدم.)

التفاصيل: لقد ورثت بعض التعليمات البرمجية القديمة التي بنيت تصفية كبيرة السلسلة في الشكل: MyColumn = '11111111-2222-3333-4444-555555555555' OR MyColumn = '11111111-2222-3333-4444-555555555555' ....

عند عدد من المعرفات الفريدة العمومية (،وبالتالي عدد أو شروط) يجب أن تكون كبيرة جدا, وهذا سبب استثناء تجاوز سعة مكدس.عن طريق استبدال العديد من أو شروط في شرط, كنت قادرا على تعيين مرشح دون استثناء.ولكن استخدام في البند يعني الحاجة إلى استخدام تحويل النهج.

هنا هو واحد طريقة استخدامها:

            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;

هنا هو اختلاف طفيف:

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

  filterSql = string.Format(filterSql, Guid.NewGuid().ToString("D"));
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top