دسته بندی ها
21:43 1399/05/22

رفع خطای Nullable object must have a value موقع استفاده از تابع Sum در انتیتی فریم ورک

مشخصات سوال کننده :
کاربر : hamdola     امتیاز کاربر : 121     رتبه کاربر : 12
دسته بندی : Asp.net Mvc Asp.net Core سی شارپ

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 4416
هوش مصنوعی

پاسخ هوش مصنوعی

برای رفع خطای "Nullable object must have a value" در استفاده از تابع Sum در Entity Framework، شما باید اطمینان حاصل کنید که مقدارهایی که به تابع Sum پاس داده می شوند، نال نیستند.

برای این کار می توانید از عملگر ?? استفاده کنید تا در صورتی که مقدار نال باشد، یک مقدار پیش فرض به آن اختصاص دهید. به عنوان مثال، می توانید کد خود را به شکل زیر اصلاح کنید:

TotalBuy = _context.UserPackage_Tbl
    .Where(up => up.PackageID == p.PackageID)
    .Sum(up => (up.PackageMainPrice ?? 0));

با این تغییر، اگر PackageMainPrice نال باشد، به جای آن از مقدار 0 استفاده می شود و به این ترتیب خطای شما برطرف خواهد شد.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : mohammad-i 12:31 1399/05/23

با این تکه کد به تنهایی نمیشه گفت مشکل چیه ولی احتمال میدم متغییر شما از نوع int؟ باشه و حاصل کوئری شما Null رو بر میگردونه.

واسه همین باید شرط بزارید اگه null بود، صفر رو برگردونه

به این پاسخ امتیاز بدهید    0
امتیاز: 260 رتبه: 7
پاسخ دهنده : saedbfd 13:20 1399/05/23

این خطا به این خاطر هست که شما دارید رکوردهایی رو از جدول با هم جمع می زنید که شامل مقدار Null هست. به همین خاطر عملیات Sum به مشکل برخورد میکنه. برای رفع این خطا میتونید از متد DefaultIfEmpty حین عملیات Sum استفاده کنید.

 

کاربرد متد DefaultIfEmpty

این متد باعث می شود حین عملیات ریاضی مثل Sum اگر رکوردی مقدار Null داشت با مقدار پیش فرض جایگزین شود. نحوه استفاده از این متد به صورت زیر می باشد. در مثال زیر گفته شده که اگر مقدار Null یافت شد با عدد 0 جایگزین شود.

 

DefaultIfEmpty(0)

 

شما میتونید کوئری خودتون رو به صورت زیر بنویسید :

 

TotalBuy = _context.UserPackage_Tbl.Where(up => up.PackageID == p.PackageID).Select(up => 
 up.PackageMainPrice).DefaultIfEmpty(0).Sum();

 

اگر میخواید در مورد متد DefaultIfEmpty اطلاعات بیشتری رو کسب کنید این لینک رو مطالعه کنید.

به این پاسخ امتیاز بدهید    1
امتیاز: 1664 رتبه: 1
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود