LINQ to Dataset DBNULL المشكلة / مرجع فارغة استثناء

StackOverflow https://stackoverflow.com/questions/881225

  •  22-08-2019
  •  | 
  •  

سؤال

لدي التالية استعلام LINQ التي دائما النتائج في خطأ عندما بلدي "ملاحظة" عمود في dtblDetail باطل ، على الرغم من أنني اختبار إذا كانت فارغة.

var varActiveAndUsedElementsWithDetails =
                        from e in dtblElements
                        join d in dtblDetails on e.PK equals d.FK into set
                        from d in set.DefaultIfEmpty()
                        where (e.ElementActive == true)
                        select new
                        {
                            ElementPK = e.PK,
                            Remark = d.IsRemarkNull() ? null : d.Remark
                        };

رسالة الخطأ:"قيمة العمود 'ملاحظة' في الجدول 'dtblDetails' هو DBNull." بعد إضافة اختبار د.IsRemarkNull() مرجع فارغة طرح استثناء.

هل يمكنك مساعدتي مع هذا ؟

لقد تم فحص المواقع التالية ولكن لم أجد أي شيء مفيد بخلاف ذلك يجب أن اختبار DBNULL.ولكن كما قلت هذا لا يحل المشكلة.

هل كانت مفيدة؟

المحلول

المشكلة أن كل 'د' في البند فارغة.لذلك يدعو 'd.IsRemarkNull()' أسفرت عن مرجع فارغة استثناء.التعليمة البرمجية التالية إصلاح المشكلة:

var varActiveAndUsedElementsWithDetails =
                    from e in dtblElements
                    join d in dtblDetails on e.PK equals d.FK into set
                    from d in set.DefaultIfEmpty()
                    where (e.ElementActive == true)
                    select new
                    {
                        ElementPK = e.PK,
                        Remark = d == null? null : (d.IsRemarkNull() ? null : d.Remark)
                    };

نصائح أخرى

أين هو الخطأ ؟ هل من الممكن أنه هو د.IsRemarkNull() الذي يسبب ذلك ؟ ماذا يعني أن الطريقة تبدو وكأنها ؟

ربما:

DBNull.Value.Equals(d.Remark)

ربما هذا المجال لا يسمح فارغة في قاعدة البيانات, الحصول على قيمة افتراضية و تجنب التعامل مع القيم الخالية

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top