DataTable حدد() مع Guid
سؤال
أنا أحاول أن 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"));